@awell-health/awell-extensions 2.0.196 → 2.0.198

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/extensions/elation/actions/checkPatientTags/checkPatientTags.d.ts +12 -0
  2. package/dist/extensions/elation/actions/checkPatientTags/checkPatientTags.js +63 -0
  3. package/dist/extensions/elation/actions/checkPatientTags/checkPatientTags.js.map +1 -0
  4. package/dist/extensions/elation/actions/checkPatientTags/config/dataPoints.d.ts +10 -0
  5. package/dist/extensions/elation/actions/checkPatientTags/config/dataPoints.js +14 -0
  6. package/dist/extensions/elation/actions/checkPatientTags/config/dataPoints.js.map +1 -0
  7. package/dist/extensions/elation/actions/checkPatientTags/config/fields.d.ts +28 -0
  8. package/dist/extensions/elation/actions/checkPatientTags/config/fields.js +26 -0
  9. package/dist/extensions/elation/actions/checkPatientTags/config/fields.js.map +1 -0
  10. package/dist/extensions/elation/actions/checkPatientTags/config/index.d.ts +2 -0
  11. package/dist/extensions/elation/actions/checkPatientTags/config/index.js +9 -0
  12. package/dist/extensions/elation/actions/checkPatientTags/config/index.js.map +1 -0
  13. package/dist/extensions/elation/actions/checkPatientTags/index.d.ts +1 -0
  14. package/dist/extensions/elation/actions/checkPatientTags/index.js +6 -0
  15. package/dist/extensions/elation/actions/checkPatientTags/index.js.map +1 -0
  16. package/dist/extensions/elation/actions/checkPatientTags/lib/checkTagsWithLLM/checkTagsWithLLM.d.ts +13 -0
  17. package/dist/extensions/elation/actions/checkPatientTags/lib/checkTagsWithLLM/checkTagsWithLLM.js +29 -0
  18. package/dist/extensions/elation/actions/checkPatientTags/lib/checkTagsWithLLM/checkTagsWithLLM.js.map +1 -0
  19. package/dist/extensions/elation/actions/checkPatientTags/lib/checkTagsWithLLM/parser.d.ts +23 -0
  20. package/dist/extensions/elation/actions/checkPatientTags/lib/checkTagsWithLLM/parser.js +11 -0
  21. package/dist/extensions/elation/actions/checkPatientTags/lib/checkTagsWithLLM/parser.js.map +1 -0
  22. package/dist/extensions/elation/actions/checkPatientTags/lib/checkTagsWithLLM/prompt.d.ts +2 -0
  23. package/dist/extensions/elation/actions/checkPatientTags/lib/checkTagsWithLLM/prompt.js +30 -0
  24. package/dist/extensions/elation/actions/checkPatientTags/lib/checkTagsWithLLM/prompt.js.map +1 -0
  25. package/dist/extensions/elation/actions/checkPatientTags/lib/evaluateCheckTags.d.ts +1 -0
  26. package/dist/extensions/elation/actions/checkPatientTags/lib/evaluateCheckTags.js +148 -0
  27. package/dist/extensions/elation/actions/checkPatientTags/lib/evaluateCheckTags.js.map +1 -0
  28. package/dist/extensions/elation/actions/index.d.ts +66 -0
  29. package/dist/extensions/elation/actions/index.js +2 -0
  30. package/dist/extensions/elation/actions/index.js.map +1 -1
  31. package/dist/extensions/index.js +2 -0
  32. package/dist/extensions/index.js.map +1 -1
  33. package/dist/extensions/markdown.json +5 -1
  34. package/dist/extensions/text-em-all/actions/createCallBroadcast/__testdata__/CreateCallBroadcast.mock.d.ts +88 -0
  35. package/dist/extensions/text-em-all/actions/createCallBroadcast/__testdata__/CreateCallBroadcast.mock.js +92 -0
  36. package/dist/extensions/text-em-all/actions/createCallBroadcast/__testdata__/CreateCallBroadcast.mock.js.map +1 -0
  37. package/dist/extensions/text-em-all/actions/createCallBroadcast/config.d.ts +254 -0
  38. package/dist/extensions/text-em-all/actions/createCallBroadcast/config.js +166 -0
  39. package/dist/extensions/text-em-all/actions/createCallBroadcast/config.js.map +1 -0
  40. package/dist/extensions/text-em-all/actions/createCallBroadcast/createCallBroadcast.d.ts +4 -0
  41. package/dist/extensions/text-em-all/actions/createCallBroadcast/createCallBroadcast.js +55 -0
  42. package/dist/extensions/text-em-all/actions/createCallBroadcast/createCallBroadcast.js.map +1 -0
  43. package/dist/extensions/text-em-all/actions/createCallBroadcast/index.d.ts +1 -0
  44. package/dist/extensions/text-em-all/actions/createCallBroadcast/index.js +18 -0
  45. package/dist/extensions/text-em-all/actions/createCallBroadcast/index.js.map +1 -0
  46. package/dist/extensions/text-em-all/actions/createCallBroadcast/types.d.ts +2 -0
  47. package/dist/extensions/text-em-all/actions/createCallBroadcast/types.js +6 -0
  48. package/dist/extensions/text-em-all/actions/createCallBroadcast/types.js.map +1 -0
  49. package/dist/extensions/text-em-all/actions/createSMSBroadcast/__testdata__/CreateSMSBroadcast.mock.d.ts +55 -0
  50. package/dist/extensions/text-em-all/actions/createSMSBroadcast/__testdata__/CreateSMSBroadcast.mock.js +59 -0
  51. package/dist/extensions/text-em-all/actions/createSMSBroadcast/__testdata__/CreateSMSBroadcast.mock.js.map +1 -0
  52. package/dist/extensions/text-em-all/actions/createSMSBroadcast/config.d.ts +82 -0
  53. package/dist/extensions/text-em-all/actions/createSMSBroadcast/config.js +87 -0
  54. package/dist/extensions/text-em-all/actions/createSMSBroadcast/config.js.map +1 -0
  55. package/dist/extensions/text-em-all/actions/createSMSBroadcast/createSMSBroadcast.d.ts +4 -0
  56. package/dist/extensions/text-em-all/actions/createSMSBroadcast/createSMSBroadcast.js +49 -0
  57. package/dist/extensions/text-em-all/actions/createSMSBroadcast/createSMSBroadcast.js.map +1 -0
  58. package/dist/extensions/text-em-all/actions/createSMSBroadcast/index.d.ts +1 -0
  59. package/dist/extensions/text-em-all/actions/createSMSBroadcast/index.js +18 -0
  60. package/dist/extensions/text-em-all/actions/createSMSBroadcast/index.js.map +1 -0
  61. package/dist/extensions/text-em-all/actions/createSMSBroadcast/types.d.ts +2 -0
  62. package/dist/extensions/text-em-all/actions/createSMSBroadcast/types.js +6 -0
  63. package/dist/extensions/text-em-all/actions/createSMSBroadcast/types.js.map +1 -0
  64. package/dist/extensions/text-em-all/actions/index.d.ts +69 -0
  65. package/dist/extensions/text-em-all/actions/index.js +9 -0
  66. package/dist/extensions/text-em-all/actions/index.js.map +1 -0
  67. package/dist/extensions/text-em-all/actions/types.d.ts +152 -0
  68. package/dist/extensions/text-em-all/actions/types.js +60 -0
  69. package/dist/extensions/text-em-all/actions/types.js.map +1 -0
  70. package/dist/extensions/text-em-all/actions/utils/validateJsonField.d.ts +2 -0
  71. package/dist/extensions/text-em-all/actions/utils/validateJsonField.js +32 -0
  72. package/dist/extensions/text-em-all/actions/utils/validateJsonField.js.map +1 -0
  73. package/dist/extensions/text-em-all/index.d.ts +2 -0
  74. package/dist/extensions/text-em-all/index.js +21 -0
  75. package/dist/extensions/text-em-all/index.js.map +1 -0
  76. package/dist/extensions/text-em-all/lib/client.d.ts +17 -0
  77. package/dist/extensions/text-em-all/lib/client.js +64 -0
  78. package/dist/extensions/text-em-all/lib/client.js.map +1 -0
  79. package/dist/extensions/text-em-all/lib/index.d.ts +1 -0
  80. package/dist/extensions/text-em-all/lib/index.js +18 -0
  81. package/dist/extensions/text-em-all/lib/index.js.map +1 -0
  82. package/dist/extensions/text-em-all/settings.d.ts +48 -0
  83. package/dist/extensions/text-em-all/settings.js +41 -0
  84. package/dist/extensions/text-em-all/settings.js.map +1 -0
  85. package/dist/extensions/text-em-all/webhooks/broadcastStatusChange.d.ts +15 -0
  86. package/dist/extensions/text-em-all/webhooks/broadcastStatusChange.js +42 -0
  87. package/dist/extensions/text-em-all/webhooks/broadcastStatusChange.js.map +1 -0
  88. package/dist/extensions/text-em-all/webhooks/index.d.ts +1 -0
  89. package/dist/extensions/text-em-all/webhooks/index.js +6 -0
  90. package/dist/extensions/text-em-all/webhooks/index.js.map +1 -0
  91. package/dist/extensions/text-em-all/webhooks/types.d.ts +24 -0
  92. package/dist/extensions/text-em-all/webhooks/types.js +15 -0
  93. package/dist/extensions/text-em-all/webhooks/types.js.map +1 -0
  94. package/package.json +4 -1
@@ -60,7 +60,7 @@
60
60
  "changelog": "# Dropbox Sign changelog"
61
61
  },
62
62
  "elation": {
63
- "readme": "---\ntitle: Elation\ndescription: Elation is a cloud-based health record system designed for healthcare providers, clinics, and medical practices.\n---\n# Elation\n\nElation is a cloud-based health record system designed for healthcare providers, clinics, and medical practices. It offers a range of features including patient scheduling, charting, e-prescribing, billing, and telemedicine. Overall, Elation is designed to streamline the workflow of medical practices, improve patient care, and increase efficiency.\n\n## Setup\n\n### Webhooks\n\nThe integration of webhooks with Elation presents unique challenges and considerations:\n\n- **Non-Discriminative Triggers**: Elation does not differentiate between the creation or update of a resource. Both actions will set off webhook with action `saved`, which might not provide enough discriminative information for some use cases.\n- **Programmatic Setup**: Elation webhooks can only be configured programmatically, as there's no dedicated user interface in Elation to set up webhooks. View [this demo video](https://youtu.be/v8u6E8MEI8E) for a step-by-step guide on how to set up your webhooks in Elation.\n- **Limitation on user-triggered actions**: Elation has a concept called \"Preventing echo\". This means that that any action carried out by the user affiliated with the API credentials that created the subscription doesn't trigger a webhook. You can read more about this behaviour [here](https://docs.elationhealth.com/reference/webhooks). If you are not receiving any webhooks from Elation after setting up your subscription, then this is the reason. A feasible workaround to the above limitation is creating a dedicated user not meant for human interactions but serves the sole purpose of facilitating M2M communication.\n\nIf you need help setting up your webhooks in Elation, reach out! We are happy to help you.\n\n### Extension settings\n\nIn order to use this extension you will need to provide the extension with the following settings:\n\n- Base URL / endpoint URL of the API\n- Authorization URL\n- Client ID for OAuth2 Password authentication\n- Client Secret for OAuth2 Password authentication\n- API Username for OAuth2 Password authentication\n- API Password for OAuth2 Password authentication\n\nNot sure where you can find all of this information? Click [here](https://docs.elationhealth.com/reference/introduction) to have a look at Elation's Developer documentation.\n\n## Actions\n\nThe following actions are supported with Elation today:\n\n### Create Patient\n\nThis action creates a patient in Elation.\n\n**When creating a patient, you will have to specifiy the primary physician and caregiver practice ID:**\n- Primary physician ID: you can retrieve this ID by using the [Find Physicians](https://docs.elationhealth.com/reference/find-physicians) API call, or by using the `Find Physician` action\n- Caregiver Practice ID: similar to the primary physician ID, you can find this ID by using the same API call or action\n\n### Get Patient\n\nUsing a patient identifier, retrieve a patient object from Elation. \n\nNote that when retrieve the mobile phone number, we are tranforming the number to an international format. We apply a heuristic and assume all mobile numbers in Elation are in US national format so we prepend the number with the +1 country code. Having the number in international format unlocks more powerful functionality like sending text messages with 3rd party services like Twilio and MessageBird.\n\n### Update Patient\n\nUpdate a patient in Elation using any fields available in create patient. We use Elation's `PATCH` method to apply partial modifications to a the patient resource (i.e. update only what is needed).\n\n### Create Appointment\n\nEasily create a patient appointment in Elation.\n\nCreating an appointment requires a few strings to be well-formulated:\n- `Scheduled date` must be a datetime string (ISO-8601). For example, January 1, 2023 at noon, Pacific Time (-8 hours) would be shown as such: `2023-01-01T12:00:00.000-08:00`\n- `Reason` must not be free text. This value comes from the following list of appointment types (`Follow-Up`, `Office Visit`, `Physical Exam`, etc.):\n![Appointment types](./assets/elation-appointment-reason.png?raw=true \"Elation Appointment Types\")\n- `Patient` is the patient ID.\n- `Physician` is the physician ID (see `Find Physician`)\n- `Practice` is the practice ID (again, see `Find Physician`)\n\nYou can also include a duration (default to 15 minutes, or whatever has been set in your EHR)\n\n### Get Appointment\n\nRetrieve appointment details using an appointment ID. \n\n### Create Non-Visit Note\n\nThe non-visit note is a special kind of note that, as the name suggests, is not associated with a visit. These notes, in their simplest form, provide a chronological account of information about the patient.\n\n**Additional documentation for some of the action fields:**\n1. Category: The default category is \"Problem\" but you can choose any of \"Past\", \"Family\", \"Social\", \"Instr\", \"PE\", \"ROS\", \"Med\", \"Data\", \"Assessment\", \"Test\", \"Tx\", \"Narrative\", \"Followup\", \"Reason\", \"Plan\", \"Objective\", \"Hpi\", \"Allergies\", \"Habits\", \"Assessplan\", \"Consultant\", \"Attending\", \"Dateprocedure\", \"Surgical\", \"Orders\", \"Referenced\", \"Procedure\".\n2. Chart and document date automatically get set to the current date, i.e. the date when the action is orchestrated.\n\n### Delete Non-Visit Note\n\nDeletes the non-visit note identified by an ID.\n\n### Get Non-Visit Note\n\nRetrieve the details of a non-visit note identified by an ID.\n### Get physician\n\nUsing a physician identifier, retrieve a physician object from Elation.\n\n### Find physicians\n\nSearch a physician based on a set of parameters. The ID of the physician matching the search parameters will be returned. To retrieve the details of the physician, you can use the the \"Get physician\" action.\n\nNote that this action can only support finding one physician so if your search criteria match multiple physicians the action will throw an error.\n\n### ✨ Find Future Appointment\n\nTries to find a **single future appointment** for a patient based on a prompt in natural language. These are the steps executed by the action:\n\n1. All future appointments with status `Scheduled` or `Confirmed` for the patient are retrieved from Elation.\n2. Based on the provided prompt, an LLM tries to find a single appointment from the list of future appointments that matches the prompt.\n3. If multiple appointments exist that match the instructions, only the first one is returned.\n\nIf a matching appointment is found, the action returns the full appointment resource and an explanation of why the LLM chose this appointment.\n\n### ✨ Find Appointments\n\nTries to find **all appointments** for a patient based on a prompt in natural language. These are the steps executed by the action:\n\n1. All appointments, independent their date or status, for the patient are retrieved from Elation.\n2. Based on the provided prompt, an LLM tries to find all appointments from the list appointments that matches the prompt.\n\nThe action returns the full appointment resources of all appointments matching the prompt and an explanation of why the LLM chose these appointments. Additionally, the action returns a count of appointments by status.\n\nExample data points output below.\n\nAppointments (note: only displaying a partial appointment resource)```json\n[\n {\n \"id\": 456,\n \"scheduled_date\": \"2023-07-12T20:44:22Z\",\n \"status\": {\n \"status\": \"Scheduled\",\n },\n },\n {\n \"id\": 456,\n \"scheduled_date\": \"2023-08-12T20:44:22Z\",\n \"status\": {\n \"status\": \"Confirmed\",\n },\n }\n]```\n\nAppointment counts by status\n```json\n{\n \"Scheduled\": 1,\n \"Confirmed\": 1,\n}\n```\n\n### ✨ Update Patient Tags\n\nUses AI to manage patient tags in Elation based on natural language instructions. The action executes the following steps:\n\n1. Retrieves existing patient tags from Elation\n2. Uses an LLM to interpret natural language instructions and determine required tag changes\n3. Updates patient tags in Elation according to the interpreted changes\n\nThe action returns:\n- Complete list of updated tags after changes\n- Detailed explanation of what changes were made and why\n\n**Important Notes:**\n- When adding new tags, specify them in single quotes (e.g., 'Diabetes', 'High-Risk'). Tags must exist in your Elation database\n- Due to Elation API limitations, clearing all tags is implemented by setting a single space tag (' '). This is the recommended workaround from Elation's team\n\n### ✨ Cancel appointments\n\nGiven a prompt, this action retrieves a patient's upcoming appointments matching the prompt and cancels them.\n",
63
+ "readme": "---\ntitle: Elation\ndescription: Elation is a cloud-based health record system designed for healthcare providers, clinics, and medical practices.\n---\n# Elation\n\nElation is a cloud-based health record system designed for healthcare providers, clinics, and medical practices. It offers a range of features including patient scheduling, charting, e-prescribing, billing, and telemedicine. Overall, Elation is designed to streamline the workflow of medical practices, improve patient care, and increase efficiency.\n\n## Setup\n\n### Webhooks\n\nThe integration of webhooks with Elation presents unique challenges and considerations:\n\n- **Non-Discriminative Triggers**: Elation does not differentiate between the creation or update of a resource. Both actions will set off webhook with action `saved`, which might not provide enough discriminative information for some use cases.\n- **Programmatic Setup**: Elation webhooks can only be configured programmatically, as there's no dedicated user interface in Elation to set up webhooks. View [this demo video](https://youtu.be/v8u6E8MEI8E) for a step-by-step guide on how to set up your webhooks in Elation.\n- **Limitation on user-triggered actions**: Elation has a concept called \"Preventing echo\". This means that that any action carried out by the user affiliated with the API credentials that created the subscription doesn't trigger a webhook. You can read more about this behaviour [here](https://docs.elationhealth.com/reference/webhooks). If you are not receiving any webhooks from Elation after setting up your subscription, then this is the reason. A feasible workaround to the above limitation is creating a dedicated user not meant for human interactions but serves the sole purpose of facilitating M2M communication.\n\nIf you need help setting up your webhooks in Elation, reach out! We are happy to help you.\n\n### Extension settings\n\nIn order to use this extension you will need to provide the extension with the following settings:\n\n- Base URL / endpoint URL of the API\n- Authorization URL\n- Client ID for OAuth2 Password authentication\n- Client Secret for OAuth2 Password authentication\n- API Username for OAuth2 Password authentication\n- API Password for OAuth2 Password authentication\n\nNot sure where you can find all of this information? Click [here](https://docs.elationhealth.com/reference/introduction) to have a look at Elation's Developer documentation.\n\n## Actions\n\nThe following actions are supported with Elation today:\n\n### Create Patient\n\nThis action creates a patient in Elation.\n\n**When creating a patient, you will have to specifiy the primary physician and caregiver practice ID:**\n- Primary physician ID: you can retrieve this ID by using the [Find Physicians](https://docs.elationhealth.com/reference/find-physicians) API call, or by using the `Find Physician` action\n- Caregiver Practice ID: similar to the primary physician ID, you can find this ID by using the same API call or action\n\n### Get Patient\n\nUsing a patient identifier, retrieve a patient object from Elation. \n\nNote that when retrieve the mobile phone number, we are tranforming the number to an international format. We apply a heuristic and assume all mobile numbers in Elation are in US national format so we prepend the number with the +1 country code. Having the number in international format unlocks more powerful functionality like sending text messages with 3rd party services like Twilio and MessageBird.\n\n### Update Patient\n\nUpdate a patient in Elation using any fields available in create patient. We use Elation's `PATCH` method to apply partial modifications to a the patient resource (i.e. update only what is needed).\n\n### Create Appointment\n\nEasily create a patient appointment in Elation.\n\nCreating an appointment requires a few strings to be well-formulated:\n- `Scheduled date` must be a datetime string (ISO-8601). For example, January 1, 2023 at noon, Pacific Time (-8 hours) would be shown as such: `2023-01-01T12:00:00.000-08:00`\n- `Reason` must not be free text. This value comes from the following list of appointment types (`Follow-Up`, `Office Visit`, `Physical Exam`, etc.):\n![Appointment types](./assets/elation-appointment-reason.png?raw=true \"Elation Appointment Types\")\n- `Patient` is the patient ID.\n- `Physician` is the physician ID (see `Find Physician`)\n- `Practice` is the practice ID (again, see `Find Physician`)\n\nYou can also include a duration (default to 15 minutes, or whatever has been set in your EHR)\n\n### Get Appointment\n\nRetrieve appointment details using an appointment ID. \n\n### Create Non-Visit Note\n\nThe non-visit note is a special kind of note that, as the name suggests, is not associated with a visit. These notes, in their simplest form, provide a chronological account of information about the patient.\n\n**Additional documentation for some of the action fields:**\n1. Category: The default category is \"Problem\" but you can choose any of \"Past\", \"Family\", \"Social\", \"Instr\", \"PE\", \"ROS\", \"Med\", \"Data\", \"Assessment\", \"Test\", \"Tx\", \"Narrative\", \"Followup\", \"Reason\", \"Plan\", \"Objective\", \"Hpi\", \"Allergies\", \"Habits\", \"Assessplan\", \"Consultant\", \"Attending\", \"Dateprocedure\", \"Surgical\", \"Orders\", \"Referenced\", \"Procedure\".\n2. Chart and document date automatically get set to the current date, i.e. the date when the action is orchestrated.\n\n### Delete Non-Visit Note\n\nDeletes the non-visit note identified by an ID.\n\n### Get Non-Visit Note\n\nRetrieve the details of a non-visit note identified by an ID.\n### Get physician\n\nUsing a physician identifier, retrieve a physician object from Elation.\n\n### Find physicians\n\nSearch a physician based on a set of parameters. The ID of the physician matching the search parameters will be returned. To retrieve the details of the physician, you can use the the \"Get physician\" action.\n\nNote that this action can only support finding one physician so if your search criteria match multiple physicians the action will throw an error.\n\n### ✨ Find Future Appointment\n\nTries to find a **single future appointment** for a patient based on a prompt in natural language. These are the steps executed by the action:\n\n1. All future appointments with status `Scheduled` or `Confirmed` for the patient are retrieved from Elation.\n2. Based on the provided prompt, an LLM tries to find a single appointment from the list of future appointments that matches the prompt.\n3. If multiple appointments exist that match the instructions, only the first one is returned.\n\nIf a matching appointment is found, the action returns the full appointment resource and an explanation of why the LLM chose this appointment.\n\n### ✨ Find Appointments\n\nTries to find **all appointments** for a patient based on a prompt in natural language. These are the steps executed by the action:\n\n1. All appointments, independent their date or status, for the patient are retrieved from Elation.\n2. Based on the provided prompt, an LLM tries to find all appointments from the list appointments that matches the prompt.\n\nThe action returns the full appointment resources of all appointments matching the prompt and an explanation of why the LLM chose these appointments. Additionally, the action returns a count of appointments by status.\n\nExample data points output below.\n\nAppointments (note: only displaying a partial appointment resource)```json\n[\n {\n \"id\": 456,\n \"scheduled_date\": \"2023-07-12T20:44:22Z\",\n \"status\": {\n \"status\": \"Scheduled\",\n },\n },\n {\n \"id\": 456,\n \"scheduled_date\": \"2023-08-12T20:44:22Z\",\n \"status\": {\n \"status\": \"Confirmed\",\n },\n }\n]```\n\nAppointment counts by status\n```json\n{\n \"Scheduled\": 1,\n \"Confirmed\": 1,\n}\n```\n\n### ✨ Update Patient Tags\n\nUses AI to manage patient tags in Elation based on natural language instructions. The action executes the following steps:\n\n1. Retrieves existing patient tags from Elation\n2. Uses an LLM to interpret natural language instructions and determine required tag changes\n3. Updates patient tags in Elation according to the interpreted changes\n\nThe action returns:\n- Complete list of updated tags after changes\n- Detailed explanation of what changes were made and why\n\n**Important Notes:**\n- When adding new tags, specify them in single quotes (e.g., 'Diabetes', 'High-Risk'). Tags must exist in your Elation database\n- Due to Elation API limitations, clearing all tags is implemented by setting a single space tag (' '). This is the recommended workaround from Elation's team\n\n### ✨ Check Patient Tags\n\nUses AI to check if a patient's tags match given instructions in natural language. The action executes the following steps:\n\n1. Retrieves existing patient tags from Elation\n2. Uses an LLM to interpret natural language instructions and check if the patient's tags match the requirements\n3. Returns a boolean result and explanation of the check\n\nThe action returns:\n- `tagsFound`: Boolean indicating if the patient's tags match the instructions\n- `explanation`: Detailed explanation of why the tags match or don't match the instructions\n\n\n**Important Notes:**\n- When specifying exact tag matches, use double quotes (e.g., \"Diabetes\", \"High-Risk\"). Tags must exist in your Elation database\n- The LLM can understand complex logical conditions like \"either/or\", \"both\", \"not\", \"any of\", \"none of\"\n\n### ✨ Cancel appointments\n\nGiven a prompt, this action retrieves a patient's upcoming appointments matching the prompt and cancels them.\n",
64
64
  "changelog": "# Elation Changelog\n\n## January 30, 2024\n\n- New actions\n - Post letter: Using patient and practice identifier, post a new letter to either Provider, Patient or associate it with an existing Referral.\n\n## October 3, 2023\n\n- The README is now more concise with less unneeded detail. A section on the particularities of Elation subscriptions (webhooks) was added.\n- Misc. updates to labels, descriptions, action fields order\n- Action updates\n - Create Non-Visit Note:\n - Simplify the action by removing some optional action fields (we can always expand later)\n - `document_date` and `chart_date` are now automatically set to the date of today so that the corresponding action fields could be removed\n - Create patient\n - `dob` is now a `date` field type (was a string)\n - You can pass a mobile phone number and email when creating a patient\n - Find physician\n - Only returns the physician ID instead of all the details of the physician. To retrieve the details one can use the new `Get physician` action\n - Update patient\n - `dob` is now a `date` field type (was a string)\n - We are now using `PATCH` instead of `PUT` which allows for a partial update, i.e. only update the fields that are needed.\n- New actions\n - Get physician: Using a physician identifier, retrieve a physician object from Elation.\n- Removed actions\n - Update Non-Visit Note\n- Webhooks\n - Fix the type of `patientId` in `patientCreatedOrUpdated` webhook\n - Added `appointmentCreatedOrUpdated` webhook\n\n## September 4, 2023\n\n- rename `onCreatePatient` webhook to `patientCreatedOrUpdated`\n- filter non `saved` actions for this webhook\n\n## August 21, 2023\n\n- make non-visit note text a large input (`StringType.TEXT`)\n\n## May 23, 2024\n\n- add patient_status.status to patient object in getPatient action\n- add status to updatePatient action\n"
65
65
  },
66
66
  "epic": {
@@ -163,6 +163,10 @@
163
163
  "readme": "---\ntitle: Talkdesk\ndescription: Talkdesk is a cloud-based customer experience and contact center software company. It provides a platform that enables businesses to set up and manage their customer service and support operations.\n---\n# TalkDesk\n\nTalkdesk is a cloud-based customer experience and contact center software company. It provides a platform that enables businesses to set up and manage their customer service and support operations. Talkdesk offers a range of features and tools to streamline and enhance communication between businesses and their customers.\n\n## Setup\n\nTo set up the extension, you'll need your Talkdesk account name along with a client ID and client secret. Please ensure that the credentials you provide are associated with the necessary permissions, or \"scopes,\" to run the extension:\n\n- flows-interactions:start\n\n## Custom Actions\n\n### Trigger flow\n\nEnables the initiation of a Talkdesk flow directly from an Awell careflow. This feature triggers an interaction using the most recent published version of a specific Studio flow. You'll need to supply the ID of the flow and the data (as a JSON object) that you want to input into the flow.\n\nImportant: Please note that Talkdesk sets a restriction of up to two API requests per second (rps) for each account using their Flows API.\n\n[Click here](https://studio.talkdesk.com/docs/sending-notifications-to-contacts-via-api-request) to learn more about triggering flows via the Talkdesk API and here to read the [API docs](https://docs.talkdesk.com/reference/flows-api-ref).\n",
164
164
  "changelog": "# TalkDesk changelog\n"
165
165
  },
166
+ "text-em-all": {
167
+ "readme": "---\ntitle: Text-Em-All\ndescription: Text-Em-All is a texting and automated calling service that enables organizations to communicate with patients.\n---\n\n# Text-Em-All\n\nText-Em-All is a texting and automated calling service that enables organizations to communicate with patients.\n\n## Supported Actions\n\n- **sendSMSBroadcast** - Schedule SMS message to a specified user\n- **sendCallBroadcast** - Schedule an Call message to a specified user\n\n## Webhooks\n\n# Broadcast Status Change\n\nTriggered when the status of a call or text broadcast changes to one of the following states:\n\n| Status | Description |\n|--------|-------------|\n| `created` | A broadcast has been created on your Call-Em-All account. It may be scheduled to run in the future and it may not have all the information set up to run yet. |\n| `ready` | The broadcast has all information necessary to run and is waiting for its start time. |\n| `broadcasting` | The broadcast started to send out phone calls or text messages. |\n| `completed` | The broadcast has finished sending out all phone calls or text messages. |\n| `paused` | The broadcast has been paused and no calls or texts are going out. |\n| `resumed` | A paused broadcast resumes. |\n| `canceled` | The broadcast was canceled. |\n| `expired` | The window that was set up for the broadcast by the user was insufficient to send out all the calls or texts. The broadcast has been expired and some of the calls and texts are not delivered. |\n\nWebhook includes:\n- Broadcast ID\n- Broadcast status\n\n## Setup\n\nThe Text-Em-All extension requires the following settings to be configured:\n\n| Setting name | Required | Description |\n|--------------|----------|-------------|\n| `customerKey` | Yes | Your Text-Em-All customer key |\n| `customerSecret` | Yes | Your Text-Em-All customer secret |\n| `token` | Yes | Your Text-Em-All token |\n| `baseUrl` | Yes | Your Text-Em-All base URL |\n\n# Find out more\n\nFor detailed information about setting up webhooks, notification formats, and additional event types, please visit the [Text-Em-All Webhooks documentation](https://dev.text-em-all.com/Webhooks#events).",
168
+ "changelog": "# Text-em-all changelog\n"
169
+ },
166
170
  "textline": {
167
171
  "readme": "---\ntitle: TextLine\ndescription: Textline's business texting software offers solutions for sales, marketing, customer service and beyond. Utilize the power of SMS to grow quickly.\n---\n\n# TextLine\n\nTextLine is a customer engagement platform used by hundreds of thousands of businesses and more than ten million developers worldwide to build unique, personalized experiences for their customers.\n\nThey are known for democratizing channels like voice, text, chat, video, and email through APIs, making it easy for every organization to build meaningful interactions with customers on the channels they prefer.\n\n## Extension settings\n\nIn order to set up this extension, you will need:\n\n1. A TextLine API key or auth token which can be found in the TextLine console.\n2. Your account SID which can be found in the TextLine console.\n3. A phone number to send the message from. This must be a TextLine phone number that you own.\n\n## Custom Actions\n\n### Send SMS\n\nSend an SMS with TextLine to a recipient of your liking.\n\n### Get messages\n\nThis action retrieves received messages. One can apply the `phoneNumber` filter to this action to display only received messages from that `phoneNumber`.\nOnly the last 30 messages are returned.\n\n### Set Contact Consent\n\nFor HIPAA and Pro accounts setup with Contact Consent, this action can set contact's consent status. To do this, your account must have API import allowed and the user making the API request must have the \"Can manually set consent\" permission on for their role. You must then use the Contact's phone number and their consent status (true or false).\n\n#### Simple Use Case\n\n**Initiating a Conversation**: A user sends a message to \"Number A\", initiating a conversation.\n\n**Receiving a Response**: \"Number A\" responds to the message, contributing to the ongoing conversation.\n\n**Searching Messages & Applying Filters**: To focus on the responses from \"Number A\", `phoneNumber`` filter can be applied to only show received messages from \"Number A\" within the conversation. This allows users to easily review and manage responses from \"Number A\", without the clutter of other received messages.\n\n",
168
172
  "changelog": "# TextLine changelog\n\n## 2024-03-11\n\n1. Add option to set department ID when sending messages and when retrieving messages. Check official documentation here: https://textline.docs.apiary.io/#reference/conversations/phone-numbers/message-a-phone-number\n## 2024-03-5\n\n1. Add capability to set contact consent status (https://textline.docs.apiary.io/#reference/customers/set-contact-consent/set-contact-consent)\n2. Add several fixes and tweaks to improve current actions\n\n## 2024-02-26\n\n1. Add capability to search for messages using all the allowed filters provided by TextLine API.\n2. Add \"Send SMS\" action\n"
@@ -0,0 +1,88 @@
1
+ export declare const CreateCallBroadcastMockResponse: {
2
+ status: number;
3
+ statusText: string;
4
+ headers: {
5
+ Location: string;
6
+ };
7
+ data: {
8
+ Uri: string;
9
+ UriBroadcastDetails: string;
10
+ BroadcastID: number;
11
+ BroadcastName: string;
12
+ BroadcastType: string;
13
+ BroadcastStatus: string;
14
+ BroadcastStatusCategory: string;
15
+ CreatedDate: string;
16
+ StartDate: string;
17
+ CompletedDate: null;
18
+ CallerID: string;
19
+ CreditsUsed: null;
20
+ MaxCreditCost: number;
21
+ PhoneNumberCount: number;
22
+ TotalCompleted: number;
23
+ User: {
24
+ PinCode: null;
25
+ UserID: number;
26
+ UserName: null;
27
+ FirstName: null;
28
+ LastName: null;
29
+ Email: null;
30
+ Phone: null;
31
+ CallerID: null;
32
+ IsMasterUser: boolean;
33
+ AuthToken: null;
34
+ State: null;
35
+ Permissions: null;
36
+ };
37
+ TransferAndConnect: {
38
+ IsTransfer: boolean;
39
+ TransferLines: number;
40
+ TransferNumber: string;
41
+ TransferCreditsUsed: null;
42
+ };
43
+ Audio: {
44
+ Uri: string;
45
+ AudioID: string;
46
+ Name: null;
47
+ Description: null;
48
+ Favorite: null;
49
+ Shared: null;
50
+ Length: number;
51
+ MessageType: null;
52
+ ReadOnly: null;
53
+ Created: null;
54
+ LastUsed: null;
55
+ TextToSpeech: boolean;
56
+ };
57
+ AudioVM: {
58
+ Uri: string;
59
+ AudioID: string;
60
+ Name: null;
61
+ Description: null;
62
+ Favorite: null;
63
+ Shared: null;
64
+ Length: number;
65
+ MessageType: null;
66
+ ReadOnly: null;
67
+ Created: null;
68
+ LastUsed: null;
69
+ TextToSpeech: boolean;
70
+ };
71
+ RetryTimes: number;
72
+ CallThrottle: number;
73
+ LivePersonTotal: number;
74
+ AnsweringMachineTotal: number;
75
+ BusyNoAnswerTotal: number;
76
+ InvalidNumberTotal: number;
77
+ SurveyResponseTotal: number;
78
+ TransferTotal: number;
79
+ SurveyResponses: null;
80
+ MaxMessageLength: number;
81
+ MessageRecordingInstruction: null;
82
+ EstimatedDuration: number;
83
+ EstimatedCompletion: null;
84
+ ExcludedDaysIgnored: boolean;
85
+ CallingWindowIgnored: boolean;
86
+ NotEnoughTimeToComplete: boolean;
87
+ };
88
+ };
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateCallBroadcastMockResponse = void 0;
4
+ exports.CreateCallBroadcastMockResponse = {
5
+ status: 200,
6
+ statusText: 'OK',
7
+ headers: {
8
+ Location: 'https://staging-rest.call-em-all.com/v1/broadcasts',
9
+ },
10
+ data: {
11
+ Uri: '/v1/broadcasts/10006607',
12
+ UriBroadcastDetails: '/v1/broadcasts/10006607/details',
13
+ BroadcastID: 10006607,
14
+ BroadcastName: 'Testing Alert System with Transfer Option',
15
+ BroadcastType: 'Announcement',
16
+ BroadcastStatus: 'AuthorizationApproved',
17
+ BroadcastStatusCategory: 'Scheduled',
18
+ CreatedDate: '2020-11-20 14:04:09-0600',
19
+ StartDate: '2020-11-20 14:04:08-0600',
20
+ CompletedDate: null,
21
+ CallerID: '2142960678',
22
+ CreditsUsed: null,
23
+ MaxCreditCost: 1,
24
+ PhoneNumberCount: 1,
25
+ TotalCompleted: 0,
26
+ User: {
27
+ PinCode: null,
28
+ UserID: 215790,
29
+ UserName: null,
30
+ FirstName: null,
31
+ LastName: null,
32
+ Email: null,
33
+ Phone: null,
34
+ CallerID: null,
35
+ IsMasterUser: false,
36
+ AuthToken: null,
37
+ State: null,
38
+ Permissions: null,
39
+ },
40
+ TransferAndConnect: {
41
+ IsTransfer: true,
42
+ TransferLines: 1,
43
+ TransferNumber: '2142960678',
44
+ TransferCreditsUsed: null,
45
+ },
46
+ Audio: {
47
+ Uri: '/v1/audio/ah2441',
48
+ AudioID: 'ah2441',
49
+ Name: null,
50
+ Description: null,
51
+ Favorite: null,
52
+ Shared: null,
53
+ Length: 10,
54
+ MessageType: null,
55
+ ReadOnly: null,
56
+ Created: null,
57
+ LastUsed: null,
58
+ TextToSpeech: false,
59
+ },
60
+ AudioVM: {
61
+ Uri: '/v1/audio/ah2442',
62
+ AudioID: 'ah2442',
63
+ Name: null,
64
+ Description: null,
65
+ Favorite: null,
66
+ Shared: null,
67
+ Length: 13,
68
+ MessageType: null,
69
+ ReadOnly: null,
70
+ Created: null,
71
+ LastUsed: null,
72
+ TextToSpeech: false,
73
+ },
74
+ RetryTimes: 1,
75
+ CallThrottle: 0,
76
+ LivePersonTotal: 0,
77
+ AnsweringMachineTotal: 0,
78
+ BusyNoAnswerTotal: 0,
79
+ InvalidNumberTotal: 0,
80
+ SurveyResponseTotal: 0,
81
+ TransferTotal: 0,
82
+ SurveyResponses: null,
83
+ MaxMessageLength: 30,
84
+ MessageRecordingInstruction: null,
85
+ EstimatedDuration: 0,
86
+ EstimatedCompletion: null,
87
+ ExcludedDaysIgnored: false,
88
+ CallingWindowIgnored: false,
89
+ NotEnoughTimeToComplete: false,
90
+ },
91
+ };
92
+ //# sourceMappingURL=CreateCallBroadcast.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateCallBroadcast.mock.js","sourceRoot":"","sources":["../../../../../../extensions/text-em-all/actions/createCallBroadcast/__testdata__/CreateCallBroadcast.mock.ts"],"names":[],"mappings":";;;AAEa,QAAA,+BAA+B,GAAG;IAC7C,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE;QACP,QAAQ,EAAE,oDAAoD;KAC/D;IACD,IAAI,EAAE;QACJ,GAAG,EAAE,yBAAyB;QAC9B,mBAAmB,EAAE,iCAAiC;QACtD,WAAW,EAAE,QAAQ;QACrB,aAAa,EAAE,2CAA2C;QAC1D,aAAa,EAAE,cAAc;QAC7B,eAAe,EAAE,uBAAuB;QACxC,uBAAuB,EAAE,WAAW;QACpC,WAAW,EAAE,0BAA0B;QACvC,SAAS,EAAE,0BAA0B;QACrC,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,YAAY;QACtB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC;QACnB,cAAc,EAAE,CAAC;QACjB,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,IAAI;SAClB;QACD,kBAAkB,EAAE;YAClB,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,CAAC;YAChB,cAAc,EAAE,YAAY;YAC5B,mBAAmB,EAAE,IAAI;SAC1B;QACD,KAAK,EAAE;YACL,GAAG,EAAE,kBAAkB;YACvB,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,EAAE;YACV,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,KAAK;SACpB;QACD,OAAO,EAAE;YACP,GAAG,EAAE,kBAAkB;YACvB,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,EAAE;YACV,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,KAAK;SACpB;QACD,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,CAAC;QAClB,qBAAqB,EAAE,CAAC;QACxB,iBAAiB,EAAE,CAAC;QACpB,kBAAkB,EAAE,CAAC;QACrB,mBAAmB,EAAE,CAAC;QACtB,aAAa,EAAE,CAAC;QAChB,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,EAAE;QACpB,2BAA2B,EAAE,IAAI;QACjC,iBAAiB,EAAE,CAAC;QACpB,mBAAmB,EAAE,IAAI;QACzB,mBAAmB,EAAE,KAAK;QAC1B,oBAAoB,EAAE,KAAK;QAC3B,uBAAuB,EAAE,KAAK;KAC/B;CAC+B,CAAA"}
@@ -0,0 +1,254 @@
1
+ import { z } from 'zod';
2
+ import { FieldType, StringType } from '@awell-health/extensions-core';
3
+ export declare const fields: {
4
+ broadcastName: {
5
+ id: string;
6
+ label: string;
7
+ type: FieldType.STRING;
8
+ required: true;
9
+ description: string;
10
+ };
11
+ broadcastType: {
12
+ id: string;
13
+ label: string;
14
+ type: FieldType.STRING;
15
+ required: true;
16
+ description: string;
17
+ options: {
18
+ dropdownOptions: {
19
+ label: "Announcement" | "Survey";
20
+ value: "Announcement" | "Survey";
21
+ }[];
22
+ };
23
+ };
24
+ startDate: {
25
+ id: string;
26
+ label: string;
27
+ type: FieldType.STRING;
28
+ required: false;
29
+ description: string;
30
+ };
31
+ maxMessageLength: {
32
+ id: string;
33
+ label: string;
34
+ type: FieldType.NUMERIC;
35
+ required: false;
36
+ description: string;
37
+ };
38
+ callerID: {
39
+ id: string;
40
+ label: string;
41
+ type: FieldType.STRING;
42
+ required: false;
43
+ description: string;
44
+ };
45
+ phoneNumber: {
46
+ id: string;
47
+ label: string;
48
+ type: FieldType.STRING;
49
+ stringType: StringType.PHONE;
50
+ required: true;
51
+ description: string;
52
+ };
53
+ checkCallingWindow: {
54
+ id: string;
55
+ label: string;
56
+ type: FieldType.BOOLEAN;
57
+ required: false;
58
+ description: string;
59
+ };
60
+ continueOnNextDay: {
61
+ id: string;
62
+ label: string;
63
+ type: FieldType.BOOLEAN;
64
+ required: false;
65
+ description: string;
66
+ };
67
+ transferAndConnect: {
68
+ id: string;
69
+ label: string;
70
+ type: FieldType.JSON;
71
+ required: false;
72
+ description: string;
73
+ };
74
+ audio: {
75
+ id: string;
76
+ label: string;
77
+ type: FieldType.JSON;
78
+ required: false;
79
+ description: string;
80
+ };
81
+ audioVM: {
82
+ id: string;
83
+ label: string;
84
+ type: FieldType.JSON;
85
+ required: false;
86
+ description: string;
87
+ };
88
+ retryTimes: {
89
+ id: string;
90
+ label: string;
91
+ type: FieldType.NUMERIC;
92
+ required: false;
93
+ description: string;
94
+ };
95
+ callThrottle: {
96
+ id: string;
97
+ label: string;
98
+ type: FieldType.NUMERIC;
99
+ required: false;
100
+ description: string;
101
+ };
102
+ };
103
+ export declare const dataPoints: {
104
+ broadcastId: {
105
+ key: string;
106
+ valueType: "number";
107
+ };
108
+ broadcastStatus: {
109
+ key: string;
110
+ valueType: "string";
111
+ };
112
+ uriBroadcastDetails: {
113
+ key: string;
114
+ valueType: "string";
115
+ };
116
+ broadcastStatusCategory: {
117
+ key: string;
118
+ valueType: "string";
119
+ };
120
+ broadcastStartDate: {
121
+ key: string;
122
+ valueType: "string";
123
+ };
124
+ };
125
+ export declare const FieldsSchema: z.ZodObject<{
126
+ broadcastName: z.ZodString;
127
+ broadcastType: z.ZodEnum<["Announcement", "Survey"]>;
128
+ startDate: z.ZodEffects<z.ZodOptional<z.ZodEffects<z.ZodDate, string, Date>>, string | undefined, Date | undefined>;
129
+ maxMessageLength: z.ZodOptional<z.ZodNumber>;
130
+ callerID: z.ZodOptional<z.ZodString>;
131
+ phoneNumber: z.ZodEffects<z.ZodString, string, string>;
132
+ checkCallingWindow: z.ZodOptional<z.ZodBoolean>;
133
+ continueOnNextDay: z.ZodOptional<z.ZodBoolean>;
134
+ transferAndConnect: z.ZodEffects<z.ZodOptional<z.ZodString>, {
135
+ transferNumber: string;
136
+ transferMessage: string;
137
+ transferDigit: string;
138
+ transferIntroduction: string;
139
+ } | undefined, string | undefined>;
140
+ audio: z.ZodEffects<z.ZodOptional<z.ZodString>, {
141
+ Description: string;
142
+ Created: string;
143
+ Text: string;
144
+ Name: string;
145
+ Voice: {
146
+ Text: string;
147
+ Voice: "Ivy" | "Joanna" | "Kendra" | "Kimberly" | "Salli" | "Joey" | "Justin" | "Kevin" | "Matthew";
148
+ TextToSpeech: boolean;
149
+ };
150
+ TextToSpeech: boolean;
151
+ Uri: string;
152
+ AudioID: string;
153
+ Favorite: boolean;
154
+ Shared: boolean;
155
+ Length: number;
156
+ MessageType: "Announcement" | "NeverUsed" | "SurveyLiveAnswer" | "SurveyVoiceMail" | "AnnouncementVoiceMail" | "TransferAndConnect";
157
+ ReadOnly: boolean;
158
+ LastUsed: string;
159
+ } | undefined, string | undefined>;
160
+ audioVM: z.ZodEffects<z.ZodOptional<z.ZodString>, {
161
+ Description: string;
162
+ Created: string;
163
+ Text: string;
164
+ Name: string;
165
+ Voice: {
166
+ Text: string;
167
+ Voice: "Ivy" | "Joanna" | "Kendra" | "Kimberly" | "Salli" | "Joey" | "Justin" | "Kevin" | "Matthew";
168
+ TextToSpeech: boolean;
169
+ };
170
+ TextToSpeech: boolean;
171
+ Uri: string;
172
+ AudioID: string;
173
+ Favorite: boolean;
174
+ Shared: boolean;
175
+ Length: number;
176
+ MessageType: "Announcement" | "NeverUsed" | "SurveyLiveAnswer" | "SurveyVoiceMail" | "AnnouncementVoiceMail" | "TransferAndConnect";
177
+ ReadOnly: boolean;
178
+ LastUsed: string;
179
+ } | undefined, string | undefined>;
180
+ retryTimes: z.ZodOptional<z.ZodNumber>;
181
+ callThrottle: z.ZodOptional<z.ZodNumber>;
182
+ }, "strip", z.ZodTypeAny, {
183
+ phoneNumber: string;
184
+ broadcastName: string;
185
+ broadcastType: "Announcement" | "Survey";
186
+ startDate?: string | undefined;
187
+ maxMessageLength?: number | undefined;
188
+ callerID?: string | undefined;
189
+ checkCallingWindow?: boolean | undefined;
190
+ continueOnNextDay?: boolean | undefined;
191
+ transferAndConnect?: {
192
+ transferNumber: string;
193
+ transferMessage: string;
194
+ transferDigit: string;
195
+ transferIntroduction: string;
196
+ } | undefined;
197
+ audio?: {
198
+ Description: string;
199
+ Created: string;
200
+ Text: string;
201
+ Name: string;
202
+ Voice: {
203
+ Text: string;
204
+ Voice: "Ivy" | "Joanna" | "Kendra" | "Kimberly" | "Salli" | "Joey" | "Justin" | "Kevin" | "Matthew";
205
+ TextToSpeech: boolean;
206
+ };
207
+ TextToSpeech: boolean;
208
+ Uri: string;
209
+ AudioID: string;
210
+ Favorite: boolean;
211
+ Shared: boolean;
212
+ Length: number;
213
+ MessageType: "Announcement" | "NeverUsed" | "SurveyLiveAnswer" | "SurveyVoiceMail" | "AnnouncementVoiceMail" | "TransferAndConnect";
214
+ ReadOnly: boolean;
215
+ LastUsed: string;
216
+ } | undefined;
217
+ audioVM?: {
218
+ Description: string;
219
+ Created: string;
220
+ Text: string;
221
+ Name: string;
222
+ Voice: {
223
+ Text: string;
224
+ Voice: "Ivy" | "Joanna" | "Kendra" | "Kimberly" | "Salli" | "Joey" | "Justin" | "Kevin" | "Matthew";
225
+ TextToSpeech: boolean;
226
+ };
227
+ TextToSpeech: boolean;
228
+ Uri: string;
229
+ AudioID: string;
230
+ Favorite: boolean;
231
+ Shared: boolean;
232
+ Length: number;
233
+ MessageType: "Announcement" | "NeverUsed" | "SurveyLiveAnswer" | "SurveyVoiceMail" | "AnnouncementVoiceMail" | "TransferAndConnect";
234
+ ReadOnly: boolean;
235
+ LastUsed: string;
236
+ } | undefined;
237
+ retryTimes?: number | undefined;
238
+ callThrottle?: number | undefined;
239
+ }, {
240
+ phoneNumber: string;
241
+ broadcastName: string;
242
+ broadcastType: "Announcement" | "Survey";
243
+ startDate?: Date | undefined;
244
+ maxMessageLength?: number | undefined;
245
+ callerID?: string | undefined;
246
+ checkCallingWindow?: boolean | undefined;
247
+ continueOnNextDay?: boolean | undefined;
248
+ transferAndConnect?: string | undefined;
249
+ audio?: string | undefined;
250
+ audioVM?: string | undefined;
251
+ retryTimes?: number | undefined;
252
+ callThrottle?: number | undefined;
253
+ }>;
254
+ export type ActionFields = z.infer<typeof FieldsSchema>;