Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| wiki:committees:trainingbot [2026/08/31 15:34] – cory | wiki:committees:trainingbot [2026/08/31 15:48] (current) – cory | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== TrainingBot | + | < |
| + | |||
| + | # TrainingBot | ||
| Some of the committees have adopted the TrainingBot system to keep on top of training requests. | Some of the committees have adopted the TrainingBot system to keep on top of training requests. | ||
| Line 7: | Line 9: | ||
| - A Slack bot (TrainingBot) posts to the committee channel whenever someone requests training. | - A Slack bot (TrainingBot) posts to the committee channel whenever someone requests training. | ||
| - The TrainingBot posts a list of all the pending training requests to the committee channel once a week. | - The TrainingBot posts a list of all the pending training requests to the committee channel once a week. | ||
| - | - Trainers view the responses form, and when they have reached out to someone they add something to a specific row, and that person is removed | + | - Trainers view the responses form, and when they have reached out to someone they add something to a specific row which removes them from the reminders list. |
| - | === Implementation details: | + | ## Implementation details: |
| - | - Create a google form in your committee' | + | - Create a google form in your committee' |
| - Make sure you collect their name, and their slack or talk handle | - Make sure you collect their name, and their slack or talk handle | ||
| - Set the google form up to save responses to a google sheet that also belongs to your committee' | - Set the google form up to save responses to a google sheet that also belongs to your committee' | ||
| - From the Form, click "App Scripts" | - From the Form, click "App Scripts" | ||
| - Name the created project "< | - Name the created project "< | ||
| - | - Click on the sidebar to add a library, and enter this library ID: %%1NX_-nJIfqTDdmuDtLvdI4-t-sXl7V5Lt0-CBHCO54jyGwFBt9_mZ9DEa%% | + | - Click on the sidebar to add a library, and enter this library ID: `1NX_-nJIfqTDdmuDtLvdI4-t-sXl7V5Lt0-CBHCO54jyGwFBt9_mZ9DEa` |
| - | - If you don't have access to the Library, ask in #vhs-it-ops on slack or DM %%@cory%%. | + | - If you don't have access to the Library, ask in `#vhs-it-ops` on slack or DM `@cory`. |
| - | - Customize and add the following code to the main %%code.gs%% file in the App Script project: | + | - Customize and add the following code to the main `code.gs` file in the App Script project: |
| - | < | + | ``` |
| const TRAINING_TYPE = " | const TRAINING_TYPE = " | ||
| const COMMITTEE_CHANNEL = " | const COMMITTEE_CHANNEL = " | ||
| Line 39: | Line 41: | ||
| VHSWebhookCode.sendSlackDMToUser(username, | VHSWebhookCode.sendSlackDMToUser(username, | ||
| }; | }; | ||
| - | </ | + | ``` |
| - | The most important details to get right are COMMITTEE_CHANNEL, | + | The most important details to get right are `COMMITTEE_CHANNEL`, which needs to exactly match the committee channel name, and `FORM_NAME_FIELD`, which needs to exactly match the name of the username field in the Google Form. |
| - | Now add a trigger, so the onSubmit script is run when the form is submitted. Go to the triggers tab from the sidebar, and add a trigger that runs onSubmit when the "On form submit" | + | Now add a trigger, so the `onSubmit` script is run when the form is submitted: go to the triggers tab from the sidebar, and add a trigger that runs `onSubmit` when the "On form submit" |
| The final step is to add the weekly reminders. To do this, go to the form's responses Sheet, and under the " | The final step is to add the weekly reminders. To do this, go to the form's responses Sheet, and under the " | ||
| Line 51: | Line 53: | ||
| Add a modified version of the following code to the App Script: | Add a modified version of the following code to the App Script: | ||
| - | < | + | ``` |
| const TRAINING_TYPE = " | const TRAINING_TYPE = " | ||
| const SHEET_NAME = "Form Responses 1"; | const SHEET_NAME = "Form Responses 1"; | ||
| Line 69: | Line 71: | ||
| VHSWebhookCode.postToSlack(CHANNEL, | VHSWebhookCode.postToSlack(CHANNEL, | ||
| } | } | ||
| - | </ | + | ``` |
| + | |||
| + | Important variables: | ||
| - | Important variables: %%SHEET_NAME%% is the name of the sheet - usually "Form Responses 1" | + | - `SHEET_NAME` is the name of the sheet - usually "Form Responses 1". |
| + | - `SHEET_NAME_INDEX` is the index of the name field, 0 is the first column, 1 is the second, etc. | ||
| + | - `SHEET_TRAINED_STATUS_INDEX` is the index of the field used to track if the member has been contacted. | ||
| - | Then go to the Triggers section, and add a "Time Based" trigger that runs %%checkForUnTrained%% weekly. | + | Then go to the Triggers section, and add a "Time Based" trigger that runs `checkForUnTrained` weekly. |
| Don't forget to run both the scripts manually - sometimes it'll toss up a permissions dialog that you have to OK before it'll run successfully. | Don't forget to run both the scripts manually - sometimes it'll toss up a permissions dialog that you have to OK before it'll run successfully. | ||
| That's it! | That's it! | ||