共计 3605 个字符,预计需要花费 10 分钟才能阅读完成。
本系列的前三篇文章,咱们顺次介绍了微信公众号开发环境的搭建,微信公众平台 API 的调用,以及地图功能的集成。
本文作为该系列第四篇文章,介绍如何实现 SAP Cloud for Customer 零碎同微信公众号的双向通信性能。
所谓双向通信,行将用户发送给微信公众号的音讯,转存到 SAP Cloud for Customer 零碎(本文余下局部应用缩写 C4C 来代替),以及从 C4C 间接回复音讯到用户微信 App 这两个方向的交互。
上面咱们别离介绍。
https://www.jianshu.com/p/91b…
用户通过微信 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….
将新建好的 Mashup Service 调配到本文上半局部创立的自定义 Channel ZJERRYWC 中去:
在微信音讯服务器实现的 index.js 里,当 endpoint /fromc4c 收到 HTTP POST 申请时,调用 handleReplyFromC4C 函数,将 C4C 座席人员的回复内容,调用微信 API 转发给微信用户。
https://github.com/wangzixi-d…
所以 C4C 座席人员回复 Service Ticket 之后,数据流向为:
C4C Mashup-> 微信公众号音讯服务器 -> 微信 app
handleReplyFromC4C.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 这两个方向的交互。