写点什么

如何打通 SAP Cloud for Customer 系统和微信公众号的双向消息通信功能

作者:Jerry Wang
  • 2022 年 10 月 02 日
    四川
  • 本文字数:3048 字

    阅读完需:约 10 分钟

如何打通 SAP Cloud for Customer 系统和微信公众号的双向消息通信功能

本系列的前三篇文章,我们依次介绍了微信公众号开发环境的搭建,微信公众平台 API 的调用,以及地图功能的集成:



本文作为该系列第四篇文章,介绍如何实现 SAP Cloud for Customer 系统同微信公众号的双向通信功能。


所谓双向通信,即将用户发送给微信公众号的消息,转存到 SAP Cloud for Customer 系统(本文余下部分使用缩写 C4C 来代替),以及从 C4C 直接回复消息到用户微信 App 这两个方向的交互。


下面我们分别介绍。


https://www.jianshu.com/p/91ba1ec3e8f7

用户通过微信 app 将消息发送到 SAP C4C 系统

微信用户点击“关注”按钮,关注了某微信公众号之后:



在 SAP C4C 系统自动生成了下列数据:(1) 一个代表该微信用户的 individual customer 主数据(2) 一个绑定到 customer 主数据的 C4C Social Media User Profile 这两条数据的 ID,会通过微信消息推送回微信用户的微信 app 上:



这些成功创建的 C4C 数据的 ID,在微信消息服务器,即 nodejs 应用的控制台上也能观察到:



根据返回给微信用户的客户主数据 ID,到 C4C 系统找到该主数据,在其 Social Profiles 面板里,能看到该 Social Profile 的渠道类型(Channel Type)为自定义的 Jerry's Wechat Channel:



一旦微信用户给微信公众号发送文本信息,该文本信息通过微信公众号的消息服务器作为中转,调用 C4C API,在 C4C 系统创建一条内容为该文本信息的 Social Media Message 数据。下图是一个例子:我发送一条"Hello C4C Agent ......"的文本信息,在 SAP C4C 系统创建的 Social Media Message ID 为 59610:



根据 ID 在 C4C 系统找到这条 Social Media Message:



同时,C4C 系统还会基于新建的 Social Media Message,自动生成一条新的 Service Ticket,这是 C4C 系统的标准功能,无需额外编程实现。



下面是这个场景具体的实现步骤。打开 C4C 配置的 Activity List:



创建一个自定义 Channel:



记下这个新建 Channel 的 Type Code:905



基于上图的 Channel 905 创建一个新的 Social Media Channel,ID 为 ZJERRYWC:



在我这个 Github 仓库下有个 service 文件夹,包含了三个 JavaScript 文件:


(1) createAccountInC4C.js:负责微信用户关注微信公众号之后, 调用 C4C OData API 创建 individual customer.(2) createSocialMediaProfile.js:调用 API 创建 C4C Social Media Profile.(3) bindSocialProfileWithIndividualCustomer.js: 负责将前两步创建的 C4C 数据绑定起来。



在第二步创建 Social Media Profile 时,调用 C4C API 传入的输入负载里,将 ChannelCode 硬编码成之前在 C4C 系统里新建的自定义 Channel 的 Type Code:905



在 createAccountInC4C.js 的实现里,这三步按顺序实现在函数 createAccount 里:



在微信消息服务器的事件处理函数里,一旦接收到“关注”事件( 事件类型值:subscribe)时,调用 createAccount 函数,完成上述三个步骤:



微信用户关注了公众号之后,发送文本消息给该公众号,微信消息服务器调用 createSocialMediaActivity.js 里的函数 createSocialMessage, 在 C4C 系统里创建一条新的 Social Media Message.


在 unittest 文件夹下有一个单元测试用例,展示了该函数的用法。


五个输入参数:


(1) o0KlM1i2_4-zHRm-IWGRlA1Cjc:发送消息给微信公众号的微信用户 ID(2) 1003: 待创建的 Social Media Message ID,传一个非空值即可,因为 C4C 系统会根据自己的 Number Range 生成该 ID,并返回给 API 调用者。(3) 6066: 当前微信用户在 C4C 系统里对应的 Social Media User Profile ID,该 ID 是在微信用户关注公众号时,在 C4C 系统生成并返回的。(4) ZJERRYWC: 之前已经介绍过,在 C4C 系统手动创建的自定义 Channel ID.(5) “Hello C4C Agent….”: 微信用户发送给微信公众号的文本信息。



使用函数 createSocialMessage,在 C4C 系统创建以微信用户发送给微信公众号的文本信息作为内容的 Social Media Message,创建成功后返回其 ID 给微信用户:59160.



根据 ID 59160 到 C4C 系统查询到该 Social Media Message,检查其 Message 字段的值,同微信用户发送给微信公众号的文本信息完全一致。


通过 SAP C4C 系统将消息回复到用户微信 App 上

本文前半部分,我们已经实现了这样的场景:某微信用户关注微信公众号之后,接下来发送给该公众号的每一条文本信息,都会以 Social Media Message 的模型,自动转存到 C4C 系统中:



同时,每一条 C4C Social Media Message 都会自动生成一条 Service Ticket,下图 ID 为 1034309 的 Ticket 是一个例子:



本文实现的场景则更进一步。C4C 座席人员在系统里回复该 Service Ticket,比如下图是座席人员的回复,大意是:“亲爱的客户,我们已经收到了您的服务请求,正在处理中”。




通过本文介绍的增强步骤,C4C 座席人员的回复,将会自动推送到微信用户的手机上:



下面是具体的实现步骤。在 C4C 系统里创建一个类型为 Rest Service 的 Mashup:



Mashup 详细信息维护如下,最关键的字段是 URL,需要指向部署到云平台的 nodejs 应用暴露出的一个 endpoint,本文的例子是/fromc4c:



当 C4C Service Ticket 被座席人员回复时,对应的数据会被 C4C 转换成 XML 格式,通过 HTTP POST,发送到上图 Mashup URL 字段维护的 endpoint 去:


http://wechatjerry.herokuapp.com/fromc4c将新建好的 Mashup Service 分配到本文上半部分创建的自定义 Channel ZJERRYWC 中去:



在微信消息服务器实现的 index.js 里,当 endpoint /fromc4c 收到 HTTP POST 请求时,调用 handleReplyFromC4C 函数,将 C4C 座席人员的回复内容,调用微信 API 转发给微信用户。



https://github.com/wangzixi-diablo/wechat-sap-integration/blob/main/jerryapp/routes/index.js


所以 C4C 座席人员回复 Service Ticket 之后,数据流向为:


C4C Mashup->微信公众号消息服务器->微信 apphandleReplyFromC4C.js 的完整实现代码如下。


微信消息服务器接收到通过 C4C Mashup 推送过来的 HTTP POST 数据,如何知道该转发给哪一个微信用户呢?答案是通过微信用户的 Wechat ID,该 ID 早在该微信用户第一次关注微信公众号的时候,就自动维护在 C4C 系统里,自动创建的客户主数据对应的 Social Profiles 标签页里:



如果忘记了这个逻辑,可以重新阅读本系列前一篇文章:如何将微信用户发送到微信公众号的消息保存到 SAP C4C 系统。因此,handleReplyFromC4C 需要三个实现步骤:



(1) C4C Mashup 推送给微信消息服务器的数据中包含了 Social Media Message ID,需要根据该 ID,调用 API 得到 message 明细,从中取出 Social Media User Profile ID.


(2) 根据 Social Media User Profile ID,调用 API 拿到 Profile 明细,从明细中取出微信用户 Wechat ID.


(3) 调用微信 API,将 Service Ticket 回复的内容,发送给 Wechat ID 对应的微信用户。这样,微信用户就能在其手机上,看到 C4C 座席人员在系统里回复 Service Ticket 的文本内容了。

总结

本系列的前三篇文章,我们依次介绍了微信公众号开发环境的搭建,微信公众平台 API 的调用,以及地图功能的集成。本文作为该系列第四篇文章,详细介绍如何实现 SAP Cloud for Customer 系统同微信公众号的双向通信功能。


所谓双向通信,即将用户发送给微信公众号的消息,转存到 SAP Cloud for Customer 系统(本文余下部分使用缩写 C4C 来代替),以及从 C4C 直接回复消息到用户微信 App 这两个方向的交互。


本系列前三篇文章的链接:


发布于: 刚刚阅读数: 3
用户头像

Jerry Wang

关注

🏆InfoQ写作平台-签约作者🏆 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发。

评论

发布
暂无评论
如何打通 SAP Cloud for Customer 系统和微信公众号的双向消息通信功能_node.js_Jerry Wang_InfoQ写作社区