尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Activepieces ClickSend 集成实战:SMS/MMS 发送、联系人管理与入站短信触发的实现解析

Activepieces ClickSend 集成实战:SMS/MMS 发送、联系人管理与入站短信触发的实现解析 Activepieces ClickSend 集成实战SMS/MMS 发送、联系人管理与入站短信触发的实现解析【免费下载链接】activepiecesAI Agents MCPs AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows AI Agents • MCPs for AI Agents项目地址: https://gitcode.com/GitHub_Trending/ac/activepieces本篇以 Activepieces 仓库中 ClickSend 集成件piece的官方说明文档为骨架结合packages/pieces/community/clicksend目录下的真实源码完整讲解该集成如何配置 Basic 认证、如何实现 9 个动作Actions与 1 个触发器Trigger、底层统一的 API 调用层如何工作以及它面向 AI Agent 的幂等性元数据设计。读完后你既能看懂 ClickSend 集成在 Activepieces 工作流中能做什么也能从源码级弄清它是怎么做的。一、集成件定位与整体结构ClickSend 是一个云端消息平台提供 SMS、MMS、语音、邮件等消息发送能力。Activepieces 仓库中的这个集成件让自动化构建者和 AI Agent 可以发送消息、管理联系人、并监听通信状态。其包名为activepieces/piece-clicksend见 package.json声明minimumSupportedRelease: 0.36.1并在 index.ts 中注册到PieceCategory.COMMUNICATION分类下。从源码结构看该件由三部分组成入口src/index.ts 定义认证clicksendAuth并调用createPiece汇总 9 个内置动作 1 个自定义 API 调用动作 1 个触发器公共层src/lib/common/index.ts 提供统一的callClickSendApiHTTP 封装和三个可复用的下拉属性联系人列表、联系人 ID、发件人动作与触发器src/lib/action/下 9 个动作文件一一对应 README 中列出的功能src/lib/trigger/new-incoming-sms.ts实现入站短信触发器。packages/pieces/community/clicksend/ ├── README.md ├── package.json # activepieces/piece-clicksend └── src/ ├── index.ts # 认证 createPiece 注册 ├── i18n/ # 10 种语言翻译 └── lib/ ├── common/index.ts # callClickSendApi 公共下拉属性 ├── action/ # 9 个动作 └── trigger/new-incoming-sms.ts二、认证配置BasicAuth 与凭据校验README 声明使用 ClickSend 需要两个凭据UsernameClickSend 用户名与API KeyAPI 密钥。在源码中这两项通过框架的PieceAuth.BasicAuth实现即用户名 API Key 会被组装成 HTTP Basic 认证头export const clicksendAuth PieceAuth.BasicAuth({ description: You can get your API credentials by clicking API Credentials on the top right of the dashboard., required: true, username: { displayName: Username, description: Your ClickSend username }, password: { displayName: API Key, description: Your ClickSend API key }, validate: async ({ auth }) { try { await callClickSendApi({ method: HttpMethod.GET, path: /account, username: auth.username, password: auth.password, }); return { valid: true }; } catch { return { valid: false, error: Invalid Credentials. }; } }, });代码见 src/index.ts值得注意的是validate回调用户在 Activepieces 界面保存连接时系统会实际调用GET /account接口探测凭据是否有效无效则提示 Invalid Credentials.。这意味着凭据错误会在配置阶段就被拦截而不是拖到工作流运行时报错。三、统一 API 调用层callClickSendApi所有动作和触发器都不直接发 HTTP 请求而是共用 src/lib/common/index.ts 中的callClickSendApiexport async function callClickSendApiT extends HttpMessageBody(params: clickSendApiParams) { return await httpClient.sendRequestT({ method: params.method, url: https://rest.clicksend.com/v3${params.path}, authentication: { type: AuthenticationType.BASIC, username: params.username, password: params.password, }, headers: { Content-Type: application/json }, body: params.body, queryParams: params.query, }); }三个关键实现事实Base URL 固定为https://rest.clicksend.com/v3所有动作的路径都是相对该前缀拼接例如/sms/send、/lists/{list_id}/contacts认证方式为AuthenticationType.BASIC由框架自动将用户名/密钥转成 Authorization 头请求头固定Content-Type: application/json查询参数通过queryParams传入——这正是联系人分页查询的基础。同一文件还定义了三个被多个动作复用的下拉属性src/lib/common/index.tscontact_list_id调用GET /lists分页拉取每页limit: 100按next_page_url翻页所有列表以list_name为标签、list_id为值渲染下拉框未连接账号时显示 Please connect your account first. 占位提示。contact_id依赖上文的contact_list_idrefreshers: [contact_list_id]对GET /lists/{contact_list_id}/contacts做同样的全量分页遍历以联系人email为标签、contact_id为值。sender_id调用GET /account返回当前账号的user_id作为发送消息时的from默认候选项。这种服务端动态拉取选项的模式保证了用户在界面上选择的是 ClickSend 账号内真实存在的 ID避免了手填 ID 导致的 404。四、发送类动作Send SMS 与 Send MMS4.1 Send SMS批量文本消息README 将 Send SMS 描述为向客户、线索或内部用户发送一条或多条短信核心属性为to含国家码的号码必填、body消息正文必填、from需在 ClickSend 审核通过的发送者必填及可选的定时参数。从源码实现看src/lib/action/send-sms.ts实际入参是一个messages数组Property.Array每个元素可携带的字段比 README 的简表更完整字段类型必填说明to短文本是收件号码含国家码如 1234567890body短文本是消息正文from短文本否发送者名称或号码需在 ClickSend 审核通过custom_string短文本否自定义追踪字符串country短文本否国家码合规用途message_expiry数字否消息有效期分钟priority复选框否是否高优先级发送运行逻辑send-sms.ts#L63-L104校验messages必须是非空数组否则抛出At least one message must be provided.对每条消息做字段裁剪——只有用户填写了才并入请求体...(from { from })这类条件展开保证不向 API 发送空字段以POST /sms/send提交{ messages: [...] }并原样返回 ClickSend 的响应体。动作同时声明了classification: WRITE且aiMetadata.idempotent: false——源码注释明确指出每次调用都会再次派发消息重复调用会产生重复短信。这一点在把它接入 AI Agent 工具调用或重试逻辑时尤其重要。4.2 Send MMS多媒体消息Send MMS 用于发送活动海报、产品图等媒体内容src/lib/action/send-mms.ts。其属性为to必填收件号码含国家码body必填消息正文subject必填主题from必填复用公共层clicksendCommon.sender_id下拉属性从GET /account动态获取media_url必填媒体文件 URL图片、视频等。运行时先做前置校验to、body、media_url三者缺一即抛错然后组装 ClickSend 要求的请求结构并以POST /mms/send发送body: { media_file: media_url, // 注意字段名映射为 media_file messages: [{ subject, from, body, to }], }一个易错点入参叫media_url但提交给 ClickSend 的字段名是media_file源码在此做了显式映射。错误处理上MMS 动作会捕获 API 错误并优先抛出ClickSend API error: {response_msg}把 ClickSend 侧的错误消息透出到工作流日志中便于定位是号码无效、媒体不可达还是配额问题。aiMetadata同样标记idempotent: false。五、联系人管理动作CRUD 与搜索README 列出的联系人相关功能在源码中均有对应实现且都内置了参数校验和错误码翻译。5.1 Create Contact向指定列表添加联系人src/lib/action/create-contact.ts。属性与 README 一致contact_list_id必填下拉、phone_number必填以及可选的email、first_name、last_name、company_name、address_line_1/2、city、state、postal_code、country。源码在发请求前执行两段本地校验function isValidPhone(phone: string) { return /^\?[1-9]\d{1,14}$/.test(phone); // E.164 风格的号码格式 } function isValidEmail(email: string) { return /^[^\s][^\s]\.[^\s]$/.test(email); }号码不合法直接抛A valid phone number is required.填了email但格式不对则抛Invalid email address.。请求体只包含非空字段最终POST /lists/{contact_list_id}/contacts。若 API 返回response_code ALREADY_EXISTS动作翻译为可读错误Contact already exists in this list.——对 README 中把网络研讨会报名录入 SMS 列表这类场景这可以避免静默产生重复联系人。aiMetadata.idempotent: false重复调用会被 API 拒绝。5.2 Update Contact更新已有联系人src/lib/action/update-contact.ts。属性为contact_list_idcontact_id两者均为依赖下拉加一组全可选的字段。与创建不同更新走PUT /lists/{contact_list_id}/contacts/{contact_id}只提交用户填写的字段部分更新语义。错误处理区分了 HTTP 状态码404 →Contact not found.403 →Permission denied.。其aiMetadata标注idempotent: true重复提交相同值不改变状态。5.3 Delete Contact从列表中删除联系人src/lib/action/delete-contact.ts仅需contact_list_id与contact_id。该动作分类为DESTRUCTIVE区别于其他动作的WRITE执行DELETE /lists/{contact_list_id}/contacts/{contact_id}成功后返回{ success: true, message: Contact deleted. }同样处理 404/403。aiMetadata将其描述为实质上幂等联系人一旦删除重复调用只是再收到一次 not-found 而不产生新副作用——对应 README 中用户退订时自动 opt-out的使用场景。5.4 Create Contact List 与联系人查询Create Contact Listsrc/lib/action/create-contact-list.ts唯一必填属性list_name空名称会被本地拒绝List name must not be empty.随后POST /lists重名时 API 的ALREADY_EXISTS被翻译为A contact list with this name already exists.。适合自动建分组营销列表的自动化前置步骤。Search Contact by Emailsrc/lib/action/search-contact-by-email.ts输入contact_list_id与email对GET /lists/{contact_list_id}/contacts做整列表分页遍历每页 100 条直到没有next_page_url找到精确匹配的邮箱即返回{ found: true, data }遍历完未找到则返回{ found: false, data: {} }。只读且幂等适合在更新或发信前先查后做。Search Contact by Phonesrc/lib/action/search-contact-by-phone.ts按手机号在列表内做同样的分页查找。Search Contact Listssrc/lib/action/search-contact-lists.ts无入参返回账号下全部联系人列表用于添加联系人前确认列表是否存在。六、附加能力自定义 API 调用动作除了上述内置动作src/index.ts 还通过框架的createCustomApiCallAction注册了一个通用动作允许用户在界面上自由指定对https://rest.clicksend.com/v3的方法与路径认证头自动按Basic base64(username:apiKey)填充。这为内置动作未覆盖的 ClickSend v3 接口如语音、邮件、余额查询等提供了逃生通道无需修改件代码。七、触发器New Incoming SMSREADME 将New Incoming SMS描述为接收新短信时触发。从源码实现看src/lib/trigger/new-incoming-sms.ts该触发器实际上采用TriggerStrategy.WEBHOOK策略通过 ClickSend 的入站自动化规则把消息推到 Activepieces 的 webhook 地址启用时onEnable调用POST /automations/sms/inbound创建一条名为AP Incoming SMS的入站规则dedicated_number设为*监听账号下所有专用号码action为URL、action_address为 Activepieces 分配的context.webhookUrlwebhook_type为json返回的inbound_rule_id存入触发器的context.store。禁用时onDisable从 store 取出规则 ID调用DELETE /automations/sms/inbound/{ruleId}清理规则避免在 ClickSend 侧遗留死规则。触发时run直接返回context.payload.body即 ClickSend 推送的 JSON 消息体。触发器输出的示例数据结构源码sampleDatanew-incoming-sms.ts#L67-L90{ message_id: 12345678, status: RECEIVED, message_timestamp: 1644321600, message_time: 2022-02-08 01:00:00, message_to: 1234567890, message_from: 0987654321, message_body: Hello from ClickSend!, message_direction: in, message_type: sms, message_parts: 1, message_cost: 0.0250, country: US, carrier: Verizon, first_name: John, last_name: Doe, email: john.doeexample.com }README 中给出的样例数据与此一致另外源码还包含from_email、list_id、custom_string、contact_id、user_id、subaccount_id等字段。由此可以构成一条完整的进-出闭环入站触发器捕获客户回复 → 工作流处理如 AI Agent 分类、写表→ 用 Send SMS 动作回发通知。八、面向 AI Agent 的设计aiMetadata 与 audience与项目AI Agents AI Workflow Automation的定位呼应ClickSend 件中的每个动作都携带audience: both人类构建者与 AI Agent 均可用和aiMetadata。aiMetadata.description用自然语言描述了动作的语义、适用场景与替代选择例如 Send MMS 的描述中明确提示消息需要携带媒体时才选它而不是 Send SMSidempotent标志则告诉 Agent 框架重试是否安全非幂等重复调用有副作用Send SMS、Send MMS、Create Contact、Create Contact List幂等可安全重试Update Contact、Delete Contact、各类 Search。这些元数据是该件能被 Agent 安全编排的关键依据也为其他集成件的编写提供了可参考的模式。九、使用场景与延伸阅读README 给出的典型场景README.md可直接映射到上述能力客户支持工单创建时自动发短信触发器 Send SMS线索管理表单线索入 SMS 营销列表Create Contact活动营销短信/彩信发送活动提醒Send SMS / Send MMS media_url订单通知订单状态与配送更新预约提醒确认与提醒自动化营销活动分组列表管理Create Contact List 各 Search 动作。此外src/i18n/目录提供了 de、es、fr、ja、nl、pt、ru、vi、zh 等 10 种语言的界面翻译见 i18n/translation.json 所在目录说明该集成件在国际化界面上的完整性。更细粒度的 ClickSend v3 接口行为以官方 API 文档为准而在 Activepieces 仓库中本文引用的全部文件——README、认证与注册、公共层、动作目录 与 触发器——均可直接打开核对作为二次开发或仿写其他消息类集成的参考基线。【免费下载链接】activepiecesAI Agents MCPs AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows AI Agents • MCPs for AI Agents项目地址: https://gitcode.com/GitHub_Trending/ac/activepieces创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表