@botonic/plugin-flow-builder 0.58.0-alpha.2 → 0.58.0-alpha.4

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 (257) hide show
  1. package/lib/cjs/action/contents-result.d.ts +0 -1
  2. package/lib/cjs/action/get-contents.js +0 -1
  3. package/lib/cjs/action/get-contents.js.map +1 -1
  4. package/lib/cjs/action/index.d.ts +1 -2
  5. package/lib/cjs/action/index.js +15 -11
  6. package/lib/cjs/action/index.js.map +1 -1
  7. package/lib/cjs/action/push-flow-resolver.js +1 -2
  8. package/lib/cjs/action/push-flow-resolver.js.map +1 -1
  9. package/lib/cjs/api.d.ts +0 -1
  10. package/lib/cjs/api.js +0 -3
  11. package/lib/cjs/api.js.map +1 -1
  12. package/lib/cjs/bot-context-manager.d.ts +3 -1
  13. package/lib/cjs/bot-context-manager.js +4 -2
  14. package/lib/cjs/bot-context-manager.js.map +1 -1
  15. package/lib/cjs/campaign-execution.d.ts +12 -0
  16. package/lib/cjs/campaign-execution.js +37 -0
  17. package/lib/cjs/campaign-execution.js.map +1 -0
  18. package/lib/cjs/content-fields/content-fields-base.d.ts +1 -0
  19. package/lib/cjs/content-fields/content-fields-base.js.map +1 -1
  20. package/lib/cjs/content-fields/custom-conditional/flow-custom-condition-v2.d.ts +1 -0
  21. package/lib/cjs/content-fields/custom-conditional/flow-custom-condition-v2.js +3 -0
  22. package/lib/cjs/content-fields/custom-conditional/flow-custom-condition-v2.js.map +1 -1
  23. package/lib/cjs/content-fields/flow-ai-agent-base.d.ts +1 -0
  24. package/lib/cjs/content-fields/flow-ai-agent-base.js +3 -0
  25. package/lib/cjs/content-fields/flow-ai-agent-base.js.map +1 -1
  26. package/lib/cjs/content-fields/flow-bot-action.d.ts +1 -0
  27. package/lib/cjs/content-fields/flow-bot-action.js +3 -0
  28. package/lib/cjs/content-fields/flow-bot-action.js.map +1 -1
  29. package/lib/cjs/content-fields/flow-button.d.ts +1 -0
  30. package/lib/cjs/content-fields/flow-button.js +3 -0
  31. package/lib/cjs/content-fields/flow-button.js.map +1 -1
  32. package/lib/cjs/content-fields/flow-capture-user-input.d.ts +1 -0
  33. package/lib/cjs/content-fields/flow-capture-user-input.js +3 -0
  34. package/lib/cjs/content-fields/flow-capture-user-input.js.map +1 -1
  35. package/lib/cjs/content-fields/flow-carousel.d.ts +1 -0
  36. package/lib/cjs/content-fields/flow-carousel.js +3 -0
  37. package/lib/cjs/content-fields/flow-carousel.js.map +1 -1
  38. package/lib/cjs/content-fields/flow-channel-conditional.d.ts +1 -0
  39. package/lib/cjs/content-fields/flow-channel-conditional.js +3 -0
  40. package/lib/cjs/content-fields/flow-channel-conditional.js.map +1 -1
  41. package/lib/cjs/content-fields/flow-contact-reasons-conditional.d.ts +1 -0
  42. package/lib/cjs/content-fields/flow-contact-reasons-conditional.js +3 -0
  43. package/lib/cjs/content-fields/flow-contact-reasons-conditional.js.map +1 -1
  44. package/lib/cjs/content-fields/flow-country-conditional.d.ts +1 -0
  45. package/lib/cjs/content-fields/flow-country-conditional.js +3 -0
  46. package/lib/cjs/content-fields/flow-country-conditional.js.map +1 -1
  47. package/lib/cjs/content-fields/flow-custom-conditional.d.ts +1 -0
  48. package/lib/cjs/content-fields/flow-custom-conditional.js +3 -0
  49. package/lib/cjs/content-fields/flow-custom-conditional.js.map +1 -1
  50. package/lib/cjs/content-fields/flow-do-nothing.d.ts +2 -0
  51. package/lib/cjs/content-fields/flow-do-nothing.js +19 -0
  52. package/lib/cjs/content-fields/flow-do-nothing.js.map +1 -1
  53. package/lib/cjs/content-fields/flow-element.d.ts +1 -0
  54. package/lib/cjs/content-fields/flow-element.js +3 -0
  55. package/lib/cjs/content-fields/flow-element.js.map +1 -1
  56. package/lib/cjs/content-fields/flow-go-to-flow.d.ts +1 -0
  57. package/lib/cjs/content-fields/flow-go-to-flow.js +3 -0
  58. package/lib/cjs/content-fields/flow-go-to-flow.js.map +1 -1
  59. package/lib/cjs/content-fields/flow-handoff.d.ts +2 -0
  60. package/lib/cjs/content-fields/flow-handoff.js +10 -0
  61. package/lib/cjs/content-fields/flow-handoff.js.map +1 -1
  62. package/lib/cjs/content-fields/flow-image.d.ts +1 -0
  63. package/lib/cjs/content-fields/flow-image.js +3 -0
  64. package/lib/cjs/content-fields/flow-image.js.map +1 -1
  65. package/lib/cjs/content-fields/flow-queue-status-conditional.d.ts +1 -0
  66. package/lib/cjs/content-fields/flow-queue-status-conditional.js +3 -0
  67. package/lib/cjs/content-fields/flow-queue-status-conditional.js.map +1 -1
  68. package/lib/cjs/content-fields/flow-rating.d.ts +1 -0
  69. package/lib/cjs/content-fields/flow-rating.js +3 -0
  70. package/lib/cjs/content-fields/flow-rating.js.map +1 -1
  71. package/lib/cjs/content-fields/flow-text.d.ts +1 -0
  72. package/lib/cjs/content-fields/flow-text.js +3 -0
  73. package/lib/cjs/content-fields/flow-text.js.map +1 -1
  74. package/lib/cjs/content-fields/flow-update-variables.d.ts +1 -0
  75. package/lib/cjs/content-fields/flow-update-variables.js +3 -0
  76. package/lib/cjs/content-fields/flow-update-variables.js.map +1 -1
  77. package/lib/cjs/content-fields/flow-video.d.ts +1 -0
  78. package/lib/cjs/content-fields/flow-video.js +3 -0
  79. package/lib/cjs/content-fields/flow-video.js.map +1 -1
  80. package/lib/cjs/content-fields/flow-webview.d.ts +1 -0
  81. package/lib/cjs/content-fields/flow-webview.js +3 -0
  82. package/lib/cjs/content-fields/flow-webview.js.map +1 -1
  83. package/lib/cjs/content-fields/flow-whatsapp-cta-url-button.d.ts +1 -0
  84. package/lib/cjs/content-fields/flow-whatsapp-cta-url-button.js +3 -0
  85. package/lib/cjs/content-fields/flow-whatsapp-cta-url-button.js.map +1 -1
  86. package/lib/cjs/content-fields/flow-whatsapp-request-contact-info.d.ts +1 -0
  87. package/lib/cjs/content-fields/flow-whatsapp-request-contact-info.js +3 -0
  88. package/lib/cjs/content-fields/flow-whatsapp-request-contact-info.js.map +1 -1
  89. package/lib/cjs/content-fields/flow-whatsapp-template.d.ts +1 -0
  90. package/lib/cjs/content-fields/flow-whatsapp-template.js +3 -0
  91. package/lib/cjs/content-fields/flow-whatsapp-template.js.map +1 -1
  92. package/lib/cjs/content-fields/hubtype-fields/handoff.d.ts +3 -1
  93. package/lib/cjs/content-fields/hubtype-fields/handoff.js +1 -0
  94. package/lib/cjs/content-fields/hubtype-fields/handoff.js.map +1 -1
  95. package/lib/cjs/content-fields/whatsapp-button-list/flow-whatsapp-button-list-row.d.ts +1 -0
  96. package/lib/cjs/content-fields/whatsapp-button-list/flow-whatsapp-button-list-row.js +3 -0
  97. package/lib/cjs/content-fields/whatsapp-button-list/flow-whatsapp-button-list-row.js.map +1 -1
  98. package/lib/cjs/content-fields/whatsapp-button-list/flow-whatsapp-button-list-section.d.ts +1 -0
  99. package/lib/cjs/content-fields/whatsapp-button-list/flow-whatsapp-button-list-section.js +3 -0
  100. package/lib/cjs/content-fields/whatsapp-button-list/flow-whatsapp-button-list-section.js.map +1 -1
  101. package/lib/cjs/content-fields/whatsapp-button-list/flow-whatsapp-button-list.d.ts +1 -0
  102. package/lib/cjs/content-fields/whatsapp-button-list/flow-whatsapp-button-list.js +3 -0
  103. package/lib/cjs/content-fields/whatsapp-button-list/flow-whatsapp-button-list.js.map +1 -1
  104. package/lib/cjs/index.d.ts +2 -0
  105. package/lib/cjs/index.js +3 -1
  106. package/lib/cjs/index.js.map +1 -1
  107. package/lib/cjs/services/campaigns-v2-api.d.ts +14 -0
  108. package/lib/cjs/services/campaigns-v2-api.js +30 -0
  109. package/lib/cjs/services/campaigns-v2-api.js.map +1 -0
  110. package/lib/esm/action/contents-result.d.ts +0 -1
  111. package/lib/esm/action/get-contents.js +0 -1
  112. package/lib/esm/action/get-contents.js.map +1 -1
  113. package/lib/esm/action/index.d.ts +1 -2
  114. package/lib/esm/action/index.js +15 -11
  115. package/lib/esm/action/index.js.map +1 -1
  116. package/lib/esm/action/push-flow-resolver.js +1 -2
  117. package/lib/esm/action/push-flow-resolver.js.map +1 -1
  118. package/lib/esm/api.d.ts +0 -1
  119. package/lib/esm/api.js +0 -3
  120. package/lib/esm/api.js.map +1 -1
  121. package/lib/esm/bot-context-manager.d.ts +3 -1
  122. package/lib/esm/bot-context-manager.js +4 -2
  123. package/lib/esm/bot-context-manager.js.map +1 -1
  124. package/lib/esm/campaign-execution.d.ts +12 -0
  125. package/lib/esm/campaign-execution.js +37 -0
  126. package/lib/esm/campaign-execution.js.map +1 -0
  127. package/lib/esm/content-fields/content-fields-base.d.ts +1 -0
  128. package/lib/esm/content-fields/content-fields-base.js.map +1 -1
  129. package/lib/esm/content-fields/custom-conditional/flow-custom-condition-v2.d.ts +1 -0
  130. package/lib/esm/content-fields/custom-conditional/flow-custom-condition-v2.js +3 -0
  131. package/lib/esm/content-fields/custom-conditional/flow-custom-condition-v2.js.map +1 -1
  132. package/lib/esm/content-fields/flow-ai-agent-base.d.ts +1 -0
  133. package/lib/esm/content-fields/flow-ai-agent-base.js +3 -0
  134. package/lib/esm/content-fields/flow-ai-agent-base.js.map +1 -1
  135. package/lib/esm/content-fields/flow-bot-action.d.ts +1 -0
  136. package/lib/esm/content-fields/flow-bot-action.js +3 -0
  137. package/lib/esm/content-fields/flow-bot-action.js.map +1 -1
  138. package/lib/esm/content-fields/flow-button.d.ts +1 -0
  139. package/lib/esm/content-fields/flow-button.js +3 -0
  140. package/lib/esm/content-fields/flow-button.js.map +1 -1
  141. package/lib/esm/content-fields/flow-capture-user-input.d.ts +1 -0
  142. package/lib/esm/content-fields/flow-capture-user-input.js +3 -0
  143. package/lib/esm/content-fields/flow-capture-user-input.js.map +1 -1
  144. package/lib/esm/content-fields/flow-carousel.d.ts +1 -0
  145. package/lib/esm/content-fields/flow-carousel.js +3 -0
  146. package/lib/esm/content-fields/flow-carousel.js.map +1 -1
  147. package/lib/esm/content-fields/flow-channel-conditional.d.ts +1 -0
  148. package/lib/esm/content-fields/flow-channel-conditional.js +3 -0
  149. package/lib/esm/content-fields/flow-channel-conditional.js.map +1 -1
  150. package/lib/esm/content-fields/flow-contact-reasons-conditional.d.ts +1 -0
  151. package/lib/esm/content-fields/flow-contact-reasons-conditional.js +3 -0
  152. package/lib/esm/content-fields/flow-contact-reasons-conditional.js.map +1 -1
  153. package/lib/esm/content-fields/flow-country-conditional.d.ts +1 -0
  154. package/lib/esm/content-fields/flow-country-conditional.js +3 -0
  155. package/lib/esm/content-fields/flow-country-conditional.js.map +1 -1
  156. package/lib/esm/content-fields/flow-custom-conditional.d.ts +1 -0
  157. package/lib/esm/content-fields/flow-custom-conditional.js +3 -0
  158. package/lib/esm/content-fields/flow-custom-conditional.js.map +1 -1
  159. package/lib/esm/content-fields/flow-do-nothing.d.ts +2 -0
  160. package/lib/esm/content-fields/flow-do-nothing.js +19 -0
  161. package/lib/esm/content-fields/flow-do-nothing.js.map +1 -1
  162. package/lib/esm/content-fields/flow-element.d.ts +1 -0
  163. package/lib/esm/content-fields/flow-element.js +3 -0
  164. package/lib/esm/content-fields/flow-element.js.map +1 -1
  165. package/lib/esm/content-fields/flow-go-to-flow.d.ts +1 -0
  166. package/lib/esm/content-fields/flow-go-to-flow.js +3 -0
  167. package/lib/esm/content-fields/flow-go-to-flow.js.map +1 -1
  168. package/lib/esm/content-fields/flow-handoff.d.ts +2 -0
  169. package/lib/esm/content-fields/flow-handoff.js +10 -0
  170. package/lib/esm/content-fields/flow-handoff.js.map +1 -1
  171. package/lib/esm/content-fields/flow-image.d.ts +1 -0
  172. package/lib/esm/content-fields/flow-image.js +3 -0
  173. package/lib/esm/content-fields/flow-image.js.map +1 -1
  174. package/lib/esm/content-fields/flow-queue-status-conditional.d.ts +1 -0
  175. package/lib/esm/content-fields/flow-queue-status-conditional.js +3 -0
  176. package/lib/esm/content-fields/flow-queue-status-conditional.js.map +1 -1
  177. package/lib/esm/content-fields/flow-rating.d.ts +1 -0
  178. package/lib/esm/content-fields/flow-rating.js +3 -0
  179. package/lib/esm/content-fields/flow-rating.js.map +1 -1
  180. package/lib/esm/content-fields/flow-text.d.ts +1 -0
  181. package/lib/esm/content-fields/flow-text.js +3 -0
  182. package/lib/esm/content-fields/flow-text.js.map +1 -1
  183. package/lib/esm/content-fields/flow-update-variables.d.ts +1 -0
  184. package/lib/esm/content-fields/flow-update-variables.js +3 -0
  185. package/lib/esm/content-fields/flow-update-variables.js.map +1 -1
  186. package/lib/esm/content-fields/flow-video.d.ts +1 -0
  187. package/lib/esm/content-fields/flow-video.js +3 -0
  188. package/lib/esm/content-fields/flow-video.js.map +1 -1
  189. package/lib/esm/content-fields/flow-webview.d.ts +1 -0
  190. package/lib/esm/content-fields/flow-webview.js +3 -0
  191. package/lib/esm/content-fields/flow-webview.js.map +1 -1
  192. package/lib/esm/content-fields/flow-whatsapp-cta-url-button.d.ts +1 -0
  193. package/lib/esm/content-fields/flow-whatsapp-cta-url-button.js +3 -0
  194. package/lib/esm/content-fields/flow-whatsapp-cta-url-button.js.map +1 -1
  195. package/lib/esm/content-fields/flow-whatsapp-request-contact-info.d.ts +1 -0
  196. package/lib/esm/content-fields/flow-whatsapp-request-contact-info.js +3 -0
  197. package/lib/esm/content-fields/flow-whatsapp-request-contact-info.js.map +1 -1
  198. package/lib/esm/content-fields/flow-whatsapp-template.d.ts +1 -0
  199. package/lib/esm/content-fields/flow-whatsapp-template.js +3 -0
  200. package/lib/esm/content-fields/flow-whatsapp-template.js.map +1 -1
  201. package/lib/esm/content-fields/hubtype-fields/handoff.d.ts +3 -1
  202. package/lib/esm/content-fields/hubtype-fields/handoff.js +1 -0
  203. package/lib/esm/content-fields/hubtype-fields/handoff.js.map +1 -1
  204. package/lib/esm/content-fields/whatsapp-button-list/flow-whatsapp-button-list-row.d.ts +1 -0
  205. package/lib/esm/content-fields/whatsapp-button-list/flow-whatsapp-button-list-row.js +3 -0
  206. package/lib/esm/content-fields/whatsapp-button-list/flow-whatsapp-button-list-row.js.map +1 -1
  207. package/lib/esm/content-fields/whatsapp-button-list/flow-whatsapp-button-list-section.d.ts +1 -0
  208. package/lib/esm/content-fields/whatsapp-button-list/flow-whatsapp-button-list-section.js +3 -0
  209. package/lib/esm/content-fields/whatsapp-button-list/flow-whatsapp-button-list-section.js.map +1 -1
  210. package/lib/esm/content-fields/whatsapp-button-list/flow-whatsapp-button-list.d.ts +1 -0
  211. package/lib/esm/content-fields/whatsapp-button-list/flow-whatsapp-button-list.js +3 -0
  212. package/lib/esm/content-fields/whatsapp-button-list/flow-whatsapp-button-list.js.map +1 -1
  213. package/lib/esm/index.d.ts +2 -0
  214. package/lib/esm/index.js +3 -1
  215. package/lib/esm/index.js.map +1 -1
  216. package/lib/esm/services/campaigns-v2-api.d.ts +14 -0
  217. package/lib/esm/services/campaigns-v2-api.js +30 -0
  218. package/lib/esm/services/campaigns-v2-api.js.map +1 -0
  219. package/package.json +2 -2
  220. package/src/action/contents-result.ts +0 -1
  221. package/src/action/get-contents.ts +0 -1
  222. package/src/action/index.tsx +20 -24
  223. package/src/action/push-flow-resolver.ts +0 -2
  224. package/src/api.ts +1 -10
  225. package/src/bot-context-manager.ts +4 -1
  226. package/src/campaign-execution.ts +51 -0
  227. package/src/content-fields/content-fields-base.ts +2 -0
  228. package/src/content-fields/custom-conditional/flow-custom-condition-v2.tsx +4 -0
  229. package/src/content-fields/flow-ai-agent-base.tsx +4 -0
  230. package/src/content-fields/flow-bot-action.tsx +4 -0
  231. package/src/content-fields/flow-button.tsx +4 -0
  232. package/src/content-fields/flow-capture-user-input.tsx +4 -0
  233. package/src/content-fields/flow-carousel.tsx +4 -0
  234. package/src/content-fields/flow-channel-conditional.tsx +4 -0
  235. package/src/content-fields/flow-contact-reasons-conditional.tsx +4 -0
  236. package/src/content-fields/flow-country-conditional.tsx +4 -0
  237. package/src/content-fields/flow-custom-conditional.tsx +4 -0
  238. package/src/content-fields/flow-do-nothing.tsx +24 -0
  239. package/src/content-fields/flow-element.tsx +4 -0
  240. package/src/content-fields/flow-go-to-flow.tsx +4 -0
  241. package/src/content-fields/flow-handoff.tsx +12 -0
  242. package/src/content-fields/flow-image.tsx +4 -0
  243. package/src/content-fields/flow-queue-status-conditional.tsx +4 -0
  244. package/src/content-fields/flow-rating.tsx +4 -0
  245. package/src/content-fields/flow-text.tsx +4 -0
  246. package/src/content-fields/flow-update-variables.tsx +4 -0
  247. package/src/content-fields/flow-video.tsx +4 -0
  248. package/src/content-fields/flow-webview.tsx +4 -0
  249. package/src/content-fields/flow-whatsapp-cta-url-button.tsx +4 -0
  250. package/src/content-fields/flow-whatsapp-request-contact-info.tsx +4 -0
  251. package/src/content-fields/flow-whatsapp-template.tsx +4 -0
  252. package/src/content-fields/hubtype-fields/handoff.ts +2 -0
  253. package/src/content-fields/whatsapp-button-list/flow-whatsapp-button-list-row.tsx +4 -0
  254. package/src/content-fields/whatsapp-button-list/flow-whatsapp-button-list-section.tsx +4 -0
  255. package/src/content-fields/whatsapp-button-list/flow-whatsapp-button-list.tsx +4 -0
  256. package/src/index.ts +4 -0
  257. package/src/services/campaigns-v2-api.ts +44 -0
@@ -1 +1 @@
1
- {"version":3,"file":"flow-whatsapp-button-list.js","sourceRoot":"","sources":["../../../../src/content-fields/whatsapp-button-list/flow-whatsapp-button-list.tsx"],"names":[],"mappings":";;;;AAAA,wCAA2D;AAC3D,0CAAiE;AAGjE,6CAAgD;AAChD,gEAA0D;AAE1D,2FAAmF;AAEnF,MAAa,sBAAuB,SAAQ,uCAAiB;IAA7D;;QACS,SAAI,GAAG,EAAE,CAAA;QACT,mBAAc,GAAG,EAAE,CAAA;QACnB,aAAQ,GAAoC,EAAE,CAAA;IAkEvD,CAAC;IAhEC,MAAM,CAAC,cAAc,CACnB,SAAmC,EACnC,MAAc,EACd,MAAsB;QAEtB,MAAM,qBAAqB,GAAG,IAAI,sBAAsB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACtE,qBAAqB,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAA;QAC3C,qBAAqB,CAAC,IAAI,GAAG,sBAAsB,CAAC,eAAe,CACjE,MAAM,EACN,SAAS,CAAC,OAAO,CAAC,IAAI,CACvB,CAAA;QACD,qBAAqB,CAAC,cAAc;YAClC,sBAAsB,CAAC,eAAe,CACpC,MAAM,EACN,SAAS,CAAC,OAAO,CAAC,WAAW,CAC9B,CAAA;QACH,qBAAqB,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CACxE,iEAA6B,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CACtE,CAAA;QACD,qBAAqB,CAAC,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAA;QAEpD,OAAO,qBAAqB,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,UAAsB;QACpC,MAAM,IAAA,0BAAe,EAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAsB;QACzC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAChC,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAC1C,OAAM;IACR,CAAC;IAED,SAAS,CAAC,UAAsB;QAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAEjE,IAAI,CAAC,IAAA,iBAAU,EAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAC9B,uBAAC,cAAM,IAAc,OAAO,EAAE,GAAG,CAAC,QAAQ,YACvC,GAAG,CAAC,KAAK,IADC,GAAG,CAAC,EAAE,CAEV,CACV,CAAC,CAAA;YAEF,OAAO,CACL,wBAAC,YAAI,eACF,YAAY,EACZ,OAAO,IACH,CACR,CAAA;QACH,CAAC;QAED,OAAO,CACL,uBAAC,0BAAkB,IAEjB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,IAAI,CAAC,cAAc,EAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,CACpD,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CACpC,IALI,IAAI,CAAC,EAAE,CAMZ,CACH,CAAA;IACH,CAAC;CACF;AArED,wDAqEC"}
1
+ {"version":3,"file":"flow-whatsapp-button-list.js","sourceRoot":"","sources":["../../../../src/content-fields/whatsapp-button-list/flow-whatsapp-button-list.tsx"],"names":[],"mappings":";;;;AAAA,wCAA2D;AAC3D,0CAAiE;AAGjE,6CAAgD;AAChD,gEAA0D;AAE1D,2FAAmF;AAEnF,MAAa,sBAAuB,SAAQ,uCAAiB;IAA7D;;QACS,SAAI,GAAG,EAAE,CAAA;QACT,mBAAc,GAAG,EAAE,CAAA;QACnB,aAAQ,GAAoC,EAAE,CAAA;IAsEvD,CAAC;IApEC,MAAM,CAAC,cAAc,CACnB,SAAmC,EACnC,MAAc,EACd,MAAsB;QAEtB,MAAM,qBAAqB,GAAG,IAAI,sBAAsB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACtE,qBAAqB,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAA;QAC3C,qBAAqB,CAAC,IAAI,GAAG,sBAAsB,CAAC,eAAe,CACjE,MAAM,EACN,SAAS,CAAC,OAAO,CAAC,IAAI,CACvB,CAAA;QACD,qBAAqB,CAAC,cAAc;YAClC,sBAAsB,CAAC,eAAe,CACpC,MAAM,EACN,SAAS,CAAC,OAAO,CAAC,WAAW,CAC9B,CAAA;QACH,qBAAqB,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CACxE,iEAA6B,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CACtE,CAAA;QACD,qBAAqB,CAAC,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAA;QAEpD,OAAO,qBAAqB,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,UAAsB;QACpC,MAAM,IAAA,0BAAe,EAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IACzC,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAsB;QACzC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAChC,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAC1C,OAAM;IACR,CAAC;IAED,SAAS,CAAC,UAAsB;QAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAEjE,IAAI,CAAC,IAAA,iBAAU,EAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAC9B,uBAAC,cAAM,IAAc,OAAO,EAAE,GAAG,CAAC,QAAQ,YACvC,GAAG,CAAC,KAAK,IADC,GAAG,CAAC,EAAE,CAEV,CACV,CAAC,CAAA;YAEF,OAAO,CACL,wBAAC,YAAI,eACF,YAAY,EACZ,OAAO,IACH,CACR,CAAA;QACH,CAAC;QAED,OAAO,CACL,uBAAC,0BAAkB,IAEjB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,IAAI,CAAC,cAAc,EAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,CACpD,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CACpC,IALI,IAAI,CAAC,EAAE,CAMZ,CACH,CAAA;IACH,CAAC;CACF;AAzED,wDAyEC"}
@@ -1,5 +1,6 @@
1
1
  import type { BotContext, Plugin, ResolvedPlugins, Session } from '@botonic/core';
2
2
  import { FlowBuilderApi } from './api';
3
+ import { CampaignExecution } from './campaign-execution';
3
4
  import type { FlowContent } from './content-fields';
4
5
  import { type HtNodeWithContent } from './content-fields/hubtype-fields';
5
6
  import { type AiAgentFunction, type BotonicPluginFlowBuilderOptions, type ContentFilter, FlowBuilderJSONVersion, type InShadowingConfig, type PayloadParamsBase, type RatingSubmittedInfo, type TrackEventFunction } from './types';
@@ -19,6 +20,7 @@ export default class BotonicPluginFlowBuilder implements Plugin {
19
20
  apiUrl: string;
20
21
  customRatingMessageEnabled: boolean;
21
22
  disableAIAgentInFirstInteraction: boolean;
23
+ campaignExecution: CampaignExecution;
22
24
  constructor(options: BotonicPluginFlowBuilderOptions<ResolvedPlugins, any>);
23
25
  resolveFlowUrl(botContext: BotContext): string;
24
26
  pre(botContext: BotContext): Promise<void>;
package/lib/esm/index.js CHANGED
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
5
5
  const uuid_1 = require("uuid");
6
6
  const api_1 = require("./api");
7
7
  const bot_context_manager_1 = require("./bot-context-manager");
8
+ const campaign_execution_1 = require("./campaign-execution");
8
9
  const constants_1 = require("./constants");
9
10
  const hubtype_fields_1 = require("./content-fields/hubtype-fields");
10
11
  const flow_factory_1 = require("./flow-factory");
@@ -52,7 +53,8 @@ class BotonicPluginFlowBuilder {
52
53
  accessToken: this.getAccessToken(botContext.session),
53
54
  botContext: this.botContext,
54
55
  });
55
- const botContextManager = new bot_context_manager_1.BotContextManager(this.cmsApi, this.smartIntentsConfig);
56
+ this.campaignExecution = new campaign_execution_1.CampaignExecution(botContext);
57
+ const botContextManager = new bot_context_manager_1.BotContextManager(this.campaignExecution, this.cmsApi, this.smartIntentsConfig);
56
58
  await botContextManager.prepareInputForRoutes(botContext);
57
59
  }
58
60
  post(botContext) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { BotContext } from '@botonic/core';
2
+ export type SkipEmptyBotResponseResult = {
3
+ id: string;
4
+ status: 'skipped';
5
+ skip_reason: 'empty_bot_response';
6
+ };
7
+ export declare class CampaignsV2Api {
8
+ private hubtypeApiUrl;
9
+ private accessToken;
10
+ private botId;
11
+ private chatId;
12
+ constructor(botContext: BotContext);
13
+ skipEmptyBotResponse(campaignId: string): Promise<SkipEmptyBotResponseResult>;
14
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CampaignsV2Api = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const axios_1 = tslib_1.__importDefault(require("axios"));
6
+ const constants_1 = require("../constants");
7
+ const get_flow_builder_plugin_1 = require("../utils/get-flow-builder-plugin");
8
+ class CampaignsV2Api {
9
+ constructor(botContext) {
10
+ this.hubtypeApiUrl =
11
+ botContext.session._hubtype_api ||
12
+ botContext.settings?.HUBTYPE_API_URL ||
13
+ constants_1.FLOW_BUILDER_API_URL_PROD;
14
+ const flowBuilderPlugin = (0, get_flow_builder_plugin_1.getFlowBuilderPlugin)(botContext.plugins);
15
+ this.accessToken = flowBuilderPlugin.getAccessToken(botContext.session);
16
+ this.botId = botContext.session.bot.id;
17
+ this.chatId = botContext.session.user.id;
18
+ }
19
+ async skipEmptyBotResponse(campaignId) {
20
+ const { data } = await axios_1.default.post(`${this.hubtypeApiUrl}/external/v2/conversational_apps/${this.botId}/users/${this.chatId}/skip_campaign/`, { campaign_id: campaignId }, {
21
+ headers: {
22
+ 'Content-Type': 'application/json',
23
+ Authorization: `Bearer ${this.accessToken}`,
24
+ },
25
+ });
26
+ return data;
27
+ }
28
+ }
29
+ exports.CampaignsV2Api = CampaignsV2Api;
30
+ //# sourceMappingURL=campaigns-v2-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campaigns-v2-api.js","sourceRoot":"","sources":["../../../src/services/campaigns-v2-api.ts"],"names":[],"mappings":";;;;AACA,0DAAyB;AACzB,4CAAwD;AACxD,8EAAuE;AAQvE,MAAa,cAAc;IAMzB,YAAY,UAAsB;QAChC,IAAI,CAAC,aAAa;YAChB,UAAU,CAAC,OAAO,CAAC,YAAY;gBAC/B,UAAU,CAAC,QAAQ,EAAE,eAAe;gBACpC,qCAAyB,CAAA;QAC3B,MAAM,iBAAiB,GAAG,IAAA,8CAAoB,EAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAClE,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACvE,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAA;QACtC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,UAAkB;QAElB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,GAAG,IAAI,CAAC,aAAa,oCAAoC,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,MAAM,iBAAiB,EACzG,EAAE,WAAW,EAAE,UAAU,EAAE,EAC3B;YACE,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,WAAW,EAAE;aAC5C;SACF,CACF,CAAA;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAhCD,wCAgCC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botonic/plugin-flow-builder",
3
- "version": "0.58.0-alpha.2",
3
+ "version": "0.58.0-alpha.4",
4
4
  "main": "./lib/cjs/index.js",
5
5
  "module": "./lib/esm/index.js",
6
6
  "description": "Use Flow Builder to show your contents",
@@ -15,7 +15,7 @@
15
15
  "format": "biome format --write src/ tests/"
16
16
  },
17
17
  "dependencies": {
18
- "@botonic/react": "0.58.0-alpha.2",
18
+ "@botonic/react": "0.58.0-alpha.4",
19
19
  "axios": "^1.18.1",
20
20
  "uuid": "^10.0.0"
21
21
  },
@@ -2,5 +2,4 @@ import type { FlowContent } from '../content-fields'
2
2
 
3
3
  export type FlowBuilderContentsResult = {
4
4
  contents: FlowContent[]
5
- campaignFirstMessageId?: string
6
5
  }
@@ -5,7 +5,6 @@ import {
5
5
  WhatsappInputOrigin,
6
6
  } from '@botonic/core'
7
7
  import { EMPTY_PAYLOAD } from '../constants'
8
- // import type { FlowContent } from '../content-fields'
9
8
  import { inputHasTextOrTranscript } from '../utils/input'
10
9
  import { getContentsByAiAgentFromUserInput } from './ai-agent-from-user-input'
11
10
  import type { FlowBuilderContentsResult } from './contents-result'
@@ -22,7 +22,6 @@ import { getContents } from './get-contents'
22
22
 
23
23
  export type FlowBuilderActionProps = {
24
24
  contents: FlowContent[]
25
- campaignFirstMessageId?: string
26
25
  webchatSettingsParams?: WebchatSettingsProps
27
26
  }
28
27
 
@@ -48,10 +47,7 @@ export class FlowBuilderAction extends React.Component<FlowBuilderActionProps> {
48
47
  botContext: BotContext,
49
48
  contentID?: string
50
49
  ): Promise<FlowBuilderActionProps> {
51
- const { contents, campaignFirstMessageId } = await getContents(
52
- botContext,
53
- contentID
54
- )
50
+ const { contents } = await getContents(botContext, contentID)
55
51
 
56
52
  const contentsToRender = await FlowBuilderAction.prepareContentsToRender(
57
53
  botContext,
@@ -60,7 +56,6 @@ export class FlowBuilderAction extends React.Component<FlowBuilderActionProps> {
60
56
 
61
57
  return {
62
58
  contents: contentsToRender,
63
- campaignFirstMessageId,
64
59
  }
65
60
  }
66
61
 
@@ -68,17 +63,22 @@ export class FlowBuilderAction extends React.Component<FlowBuilderActionProps> {
68
63
  botContext: BotContext,
69
64
  contents: FlowContent[]
70
65
  ) {
66
+ const flowBuilderPlugin = getFlowBuilderPlugin(botContext.plugins)
67
+ const { campaignExecution, cmsApi } = flowBuilderPlugin
68
+
71
69
  for (const content of contents) {
72
70
  if (FlowBuilderAction.isAiAgentContent(content)) {
73
71
  await FlowBuilderAction.processAiAgentContent(botContext, contents)
72
+ campaignExecution.updateHasBotResponse(content)
74
73
  continue
75
74
  }
76
75
 
77
76
  await content.processContent(botContext)
78
77
 
78
+ campaignExecution.updateHasBotResponse(content)
79
+
79
80
  if (content instanceof FlowWhatsappRequestContactInfoNode) {
80
- const flowBuilderPlugin = getFlowBuilderPlugin(botContext.plugins)
81
- flowBuilderPlugin.cmsApi.setWhatsappRequestContactId(content.id)
81
+ cmsApi.setWhatsappRequestContactId(content.id)
82
82
  }
83
83
  }
84
84
 
@@ -145,7 +145,7 @@ export class FlowBuilderAction extends React.Component<FlowBuilderActionProps> {
145
145
  }
146
146
 
147
147
  render(): JSX.Element | JSX.Element[] {
148
- const { contents, campaignFirstMessageId } = this.props
148
+ const { contents } = this.props
149
149
  const botContext = this.context as BotContext
150
150
  const { shouldSendWebchatSettings, webchatSettingsParams } =
151
151
  this.getWebchatSettingsParams(botContext)
@@ -155,28 +155,28 @@ export class FlowBuilderAction extends React.Component<FlowBuilderActionProps> {
155
155
  {shouldSendWebchatSettings && (
156
156
  <WebchatSettings {...webchatSettingsParams} />
157
157
  )}
158
- {FlowBuilderAction.renderContents(
159
- contents,
160
- botContext,
161
- campaignFirstMessageId
162
- )}
158
+ {FlowBuilderAction.renderContents(contents, botContext)}
163
159
  </>
164
160
  )
165
161
  }
166
162
 
167
163
  protected static renderContents(
168
164
  contents: FlowContent[],
169
- botContext: BotContext,
170
- campaignFirstMessageId?: string
165
+ botContext: BotContext
171
166
  ): JSX.Element | JSX.Element[] {
167
+ const flowBuilderPlugin = getFlowBuilderPlugin(botContext.plugins)
168
+ const { campaignExecution } = flowBuilderPlugin
169
+
172
170
  const rendered = contents.map(content => content.toBotonic(botContext))
173
171
 
174
- if (!campaignFirstMessageId) {
172
+ if (!campaignExecution.isActive() || !campaignExecution.campaignId) {
175
173
  return rendered
176
174
  }
177
175
 
178
176
  return (
179
- <CampaignMessageAttributesProvider campaignId={campaignFirstMessageId}>
177
+ <CampaignMessageAttributesProvider
178
+ campaignId={campaignExecution.campaignId}
179
+ >
180
180
  {rendered}
181
181
  </CampaignMessageAttributesProvider>
182
182
  )
@@ -185,7 +185,7 @@ export class FlowBuilderAction extends React.Component<FlowBuilderActionProps> {
185
185
 
186
186
  export class FlowBuilderMultichannelAction extends FlowBuilderAction {
187
187
  render(): JSX.Element | JSX.Element[] {
188
- const { contents, campaignFirstMessageId } = this.props
188
+ const { contents } = this.props
189
189
  const botContext = this.context as BotContext
190
190
  const { shouldSendWebchatSettings, webchatSettingsParams } =
191
191
  this.getWebchatSettingsParams(botContext)
@@ -195,11 +195,7 @@ export class FlowBuilderMultichannelAction extends FlowBuilderAction {
195
195
  {shouldSendWebchatSettings && (
196
196
  <WebchatSettings {...webchatSettingsParams} />
197
197
  )}
198
- {FlowBuilderAction.renderContents(
199
- contents,
200
- botContext,
201
- campaignFirstMessageId
202
- )}
198
+ {FlowBuilderAction.renderContents(contents, botContext)}
203
199
  </Multichannel>
204
200
  )
205
201
  }
@@ -50,7 +50,6 @@ export class PushFlowResolver {
50
50
  }
51
51
 
52
52
  const {
53
- campaign_id: campaignId,
54
53
  campaign_flow_id: campaignFlowId,
55
54
  campaign_follow_up_id: campaignFollowUpId,
56
55
  } = campaignContext
@@ -71,7 +70,6 @@ export class PushFlowResolver {
71
70
  contents: await this.flowBuilderPlugin.getContentsByNode(
72
71
  followUpNode ?? campaignStartNode
73
72
  ),
74
- campaignFirstMessageId: campaignId,
75
73
  }
76
74
  }
77
75
 
package/src/api.ts CHANGED
@@ -1,12 +1,7 @@
1
1
  import type { BotContext } from '@botonic/core'
2
2
  import axios from 'axios'
3
3
 
4
- import {
5
- AI_AGENTS_FLOW_NAME,
6
- PUSH_FLOW_PAYLOAD,
7
- SEPARATOR,
8
- UUID_REGEXP,
9
- } from './constants'
4
+ import { AI_AGENTS_FLOW_NAME, SEPARATOR, UUID_REGEXP } from './constants'
10
5
  import {
11
6
  type HtBotActionNode,
12
7
  type HtCaptureUserInputNode,
@@ -340,8 +335,4 @@ export class FlowBuilderApi {
340
335
  defaultLocaleCode
341
336
  ).resolve()
342
337
  }
343
-
344
- isPushFlowPayload(payload?: string): boolean {
345
- return payload?.startsWith(PUSH_FLOW_PAYLOAD) ?? false
346
- }
347
338
  }
@@ -6,6 +6,7 @@ import {
6
6
  } from '@botonic/core'
7
7
 
8
8
  import type { FlowBuilderApi } from './api'
9
+ import type { CampaignExecution } from './campaign-execution'
9
10
  import {
10
11
  EMPTY_PAYLOAD,
11
12
  ON_CLOSE_HANDOFF_PAYLOAD,
@@ -24,6 +25,7 @@ import { inputHasTextOrTranscript } from './utils/input'
24
25
 
25
26
  export class BotContextManager {
26
27
  constructor(
28
+ private readonly campaignExecution: CampaignExecution,
27
29
  private readonly cmsApi: FlowBuilderApi,
28
30
  private readonly smartIntentsConfig: SmartIntentsInferenceConfig
29
31
  ) {}
@@ -48,7 +50,8 @@ export class BotContextManager {
48
50
  private async updateFirstInteractionOnPushFlowPayload(
49
51
  botContext: BotContext
50
52
  ): Promise<void> {
51
- if (this.cmsApi.isPushFlowPayload(botContext.input.payload)) {
53
+ const campaignExecution = this.campaignExecution
54
+ if (campaignExecution.isPushFlowPayload()) {
52
55
  botContext.session.is_first_interaction = false
53
56
  }
54
57
  }
@@ -0,0 +1,51 @@
1
+ import {
2
+ type BotContext,
3
+ BotonicInputContextType,
4
+ getInputContextOfType,
5
+ type PushFlowContext,
6
+ } from '@botonic/core'
7
+
8
+ import { PUSH_FLOW_PAYLOAD } from './constants'
9
+ import type { FlowContent } from './content-fields'
10
+
11
+ export class CampaignExecution {
12
+ public hasBotResponse = false
13
+ private botContext: BotContext
14
+
15
+ constructor(botContext: BotContext) {
16
+ this.botContext = botContext
17
+ }
18
+
19
+ isActive(): boolean {
20
+ if (!this.isPushFlowPayload()) {
21
+ return false
22
+ }
23
+
24
+ return this.getPushFlowContext() !== undefined
25
+ }
26
+
27
+ get campaignId(): string | undefined {
28
+ return this.getPushFlowContext()?.campaign_id
29
+ }
30
+
31
+ updateHasBotResponse(content: FlowContent): void {
32
+ if (!this.isActive() || this.hasBotResponse) {
33
+ return
34
+ }
35
+ if (content.producesBotResponse()) {
36
+ this.hasBotResponse = true
37
+ }
38
+ }
39
+
40
+ isPushFlowPayload(): boolean {
41
+ const payload = this.botContext.input.payload
42
+ return payload?.startsWith(PUSH_FLOW_PAYLOAD) ?? false
43
+ }
44
+
45
+ private getPushFlowContext(): PushFlowContext | undefined {
46
+ return getInputContextOfType(
47
+ this.botContext.input.context,
48
+ BotonicInputContextType.PushFlow
49
+ )
50
+ }
51
+ }
@@ -22,6 +22,8 @@ export abstract class ContentFieldsBase {
22
22
 
23
23
  abstract trackFlow(botContext: BotContext): Promise<void>
24
24
 
25
+ abstract producesBotResponse(): boolean
26
+
25
27
  abstract processContent(botContext: BotContext): Promise<void>
26
28
 
27
29
  async filterContent(
@@ -124,6 +124,10 @@ export class FlowCustomConditionalV2 extends ContentFieldsBase {
124
124
  await trackEvent(botContext, action, eventArgs)
125
125
  }
126
126
 
127
+ producesBotResponse(): boolean {
128
+ return false
129
+ }
130
+
127
131
  async processContent(botContext: BotContext): Promise<void> {
128
132
  await this.filterContent(botContext, this)
129
133
  await this.trackFlow(botContext)
@@ -114,6 +114,10 @@ export abstract class FlowAiAgentBase extends ContentFieldsBase {
114
114
  return
115
115
  }
116
116
 
117
+ producesBotResponse(): boolean {
118
+ return this.jsxElements.length > 0
119
+ }
120
+
117
121
  async processContent(
118
122
  botContext: BotContext,
119
123
  previousContents?: FlowContent[]
@@ -51,6 +51,10 @@ export class FlowBotAction extends ContentFieldsBase {
51
51
  botContext.session._botonic_action = `${BotonicAction.Redirect}:${this.payload}`
52
52
  }
53
53
 
54
+ producesBotResponse(): boolean {
55
+ return false
56
+ }
57
+
54
58
  async processContent(botContext: BotContext): Promise<void> {
55
59
  await this.filterContent(botContext, this)
56
60
  this.doBotAction(botContext)
@@ -98,6 +98,10 @@ export class FlowButton extends ContentFieldsBase {
98
98
  }
99
99
  }
100
100
 
101
+ producesBotResponse(): boolean {
102
+ return false
103
+ }
104
+
101
105
  async processContent(): Promise<void> {
102
106
  return
103
107
  }
@@ -34,6 +34,10 @@ export class FlowCaptureUserInput extends ContentFieldsBase {
34
34
  return
35
35
  }
36
36
 
37
+ producesBotResponse(): boolean {
38
+ return false
39
+ }
40
+
37
41
  async processContent(): Promise<void> {
38
42
  return
39
43
  }
@@ -203,6 +203,10 @@ export class FlowCarousel extends ContentFieldsBase {
203
203
  }
204
204
  }
205
205
 
206
+ producesBotResponse(): boolean {
207
+ return true
208
+ }
209
+
206
210
  async processContent(botContext: BotContext): Promise<void> {
207
211
  await this.filterContent(botContext, this)
208
212
  await this.trackFlow(botContext)
@@ -62,6 +62,10 @@ export class FlowChannelConditional extends ContentFieldsBase {
62
62
  await trackEvent(botContext, action, eventArgs)
63
63
  }
64
64
 
65
+ producesBotResponse(): boolean {
66
+ return false
67
+ }
68
+
65
69
  async processContent(botContext: BotContext): Promise<void> {
66
70
  await this.filterContent(botContext, this)
67
71
  await this.trackFlow(botContext)
@@ -107,6 +107,10 @@ export class FlowContactReasonsConditional extends ContentFieldsBase {
107
107
  return
108
108
  }
109
109
 
110
+ producesBotResponse(): boolean {
111
+ return false
112
+ }
113
+
110
114
  async processContent(botContext: BotContext): Promise<void> {
111
115
  await this.filterContent(botContext, this)
112
116
  await this.trackFlow(botContext)
@@ -64,6 +64,10 @@ export class FlowCountryConditional extends ContentFieldsBase {
64
64
  await trackEvent(botContext, action, eventArgs)
65
65
  }
66
66
 
67
+ producesBotResponse(): boolean {
68
+ return false
69
+ }
70
+
67
71
  async processContent(botContext: BotContext): Promise<void> {
68
72
  await this.filterContent(botContext, this)
69
73
  await this.trackFlow(botContext)
@@ -115,6 +115,10 @@ export class FlowCustomConditional extends ContentFieldsBase {
115
115
  )
116
116
  }
117
117
 
118
+ producesBotResponse(): boolean {
119
+ return false
120
+ }
121
+
118
122
  async processContent(botContext: BotContext): Promise<void> {
119
123
  await this.filterContent(botContext, this)
120
124
  await this.trackFlow(botContext)
@@ -1,6 +1,8 @@
1
1
  import type { BotContext } from '@botonic/core'
2
2
 
3
+ import { CampaignsV2Api } from '../services/campaigns-v2-api'
3
4
  import { trackOneContent } from '../tracking'
5
+ import { getFlowBuilderPlugin } from '../utils/get-flow-builder-plugin'
4
6
  import { ContentFieldsBase } from './content-fields-base'
5
7
  import type { HtDoNothingNode } from './hubtype-fields'
6
8
 
@@ -13,13 +15,35 @@ export class FlowDoNothing extends ContentFieldsBase {
13
15
  return newDoNothing
14
16
  }
15
17
 
18
+ private async skipCampaignIfNoBotResponse(
19
+ botContext: BotContext
20
+ ): Promise<void> {
21
+ const flowBuilderPlugin = getFlowBuilderPlugin(botContext.plugins)
22
+ const campaignExecution = flowBuilderPlugin.campaignExecution
23
+ if (!campaignExecution.isActive() || campaignExecution.hasBotResponse) {
24
+ return
25
+ }
26
+ const campaignId = campaignExecution.campaignId
27
+ if (!campaignId) {
28
+ return
29
+ }
30
+
31
+ const campaignsV2Api = new CampaignsV2Api(botContext)
32
+ await campaignsV2Api.skipEmptyBotResponse(campaignId)
33
+ }
34
+
16
35
  async trackFlow(botContext: BotContext): Promise<void> {
17
36
  await trackOneContent(botContext, this)
18
37
  }
19
38
 
39
+ producesBotResponse(): boolean {
40
+ return false
41
+ }
42
+
20
43
  async processContent(botContext: BotContext): Promise<void> {
21
44
  await this.filterContent(botContext, this)
22
45
  await this.trackFlow(botContext)
46
+ await this.skipCampaignIfNoBotResponse(botContext)
23
47
  return
24
48
  }
25
49
 
@@ -62,6 +62,10 @@ export class FlowElement extends ContentFieldsBase {
62
62
  }
63
63
  }
64
64
 
65
+ producesBotResponse(): boolean {
66
+ return false
67
+ }
68
+
65
69
  async processContent(botContext: BotContext): Promise<void> {
66
70
  await this.trackFlow(botContext)
67
71
  return
@@ -50,6 +50,10 @@ export class FlowGoToFlow extends ContentFieldsBase {
50
50
  await trackEvent(botContext, action, eventArgs)
51
51
  }
52
52
 
53
+ producesBotResponse(): boolean {
54
+ return false
55
+ }
56
+
53
57
  async processContent(botContext: BotContext): Promise<void> {
54
58
  await this.filterContent(botContext, this)
55
59
  await this.trackFlow(botContext)
@@ -27,6 +27,7 @@ export class FlowHandoff extends ContentFieldsBase {
27
27
  public discardedByAgent?: HtNodeLink
28
28
  public discardedByUser?: HtNodeLink
29
29
  public discardedBySystem?: HtNodeLink
30
+ public discardedByBulk?: HtNodeLink
30
31
  public isTestIntegration: boolean
31
32
 
32
33
  static fromHubtypeCMS(
@@ -46,6 +47,7 @@ export class FlowHandoff extends ContentFieldsBase {
46
47
  newHandoff.discardedByAgent = cmsHandoff.content.discarded_by_agent
47
48
  newHandoff.discardedByUser = cmsHandoff.content.discarded_by_user
48
49
  newHandoff.discardedBySystem = cmsHandoff.content.discarded_by_system
50
+ newHandoff.discardedByBulk = cmsHandoff.content.discarded_by_bulk
49
51
  newHandoff.handoffAutoAssign = cmsHandoff.content.has_auto_assign
50
52
  newHandoff.hasQueuePositionChangedNotificationsEnabled =
51
53
  cmsHandoff.content.has_queue_position_changed_notifications_enabled
@@ -94,6 +96,12 @@ export class FlowHandoff extends ContentFieldsBase {
94
96
  }
95
97
  console.error('No discarded by system target found')
96
98
  }
99
+ if (contactReasons.some(reason => reason.name === DiscardType.ByBulk)) {
100
+ if (this.discardedByBulk?.id) {
101
+ return this.discardedByBulk.id
102
+ }
103
+ console.error('No discarded by bulk target found')
104
+ }
97
105
  if (this.resolvedByAgent?.id) {
98
106
  return this.resolvedByAgent.id
99
107
  }
@@ -142,6 +150,10 @@ export class FlowHandoff extends ContentFieldsBase {
142
150
  // TODO: Not apply for this content because backend track handoff success event
143
151
  }
144
152
 
153
+ producesBotResponse(): boolean {
154
+ return false
155
+ }
156
+
145
157
  async processContent(botContext: BotContext): Promise<void> {
146
158
  await this.filterContent(botContext, this)
147
159
  await this.doHandoff(botContext)
@@ -21,6 +21,10 @@ export class FlowImage extends ContentFieldsBase {
21
21
  await trackOneContent(botContext, this)
22
22
  }
23
23
 
24
+ producesBotResponse(): boolean {
25
+ return true
26
+ }
27
+
24
28
  async processContent(botContext: BotContext): Promise<void> {
25
29
  await this.filterContent(botContext, this)
26
30
  await this.trackFlow(botContext)
@@ -127,6 +127,10 @@ export class FlowQueueStatusConditional extends ContentFieldsBase {
127
127
  await trackEvent(botContext, action, eventArgs)
128
128
  }
129
129
 
130
+ producesBotResponse(): boolean {
131
+ return false
132
+ }
133
+
130
134
  async processContent(botContext: BotContext): Promise<void> {
131
135
  await this.filterContent(botContext, this)
132
136
  await this.trackFlow(botContext)