whatsapp.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  1. package aliyun
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. cams20200606 "github.com/alibabacloud-go/cams-20200606/v2/client"
  6. openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  7. "github.com/alibabacloud-go/tea/tea"
  8. )
  9. const (
  10. AccessKeyId string = "LTAI5tSJwCQyuaxXR3UxfnWw"
  11. AccessKeySecret string = "0pv4xhSPJv9IPSxrkB52FspJk27W7V"
  12. RegionId string = "cams.ap-southeast-1.aliyuncs.com"
  13. )
  14. // Description:
  15. // 使用AK&SK初始化账号Client
  16. // @return Client
  17. // @throws Exception
  18. func CreateCamsClient() (_result *cams20200606.Client, _err error) {
  19. // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
  20. // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378661.html。
  21. config := &openapi.Config{
  22. // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
  23. AccessKeyId: tea.String(AccessKeyId),
  24. // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
  25. AccessKeySecret: tea.String(AccessKeySecret),
  26. }
  27. // Endpoint 请参考 https://api.aliyun.com/product/cams
  28. config.Endpoint = tea.String(RegionId)
  29. _result = &cams20200606.Client{}
  30. _result, _err = cams20200606.NewClient(config)
  31. return _result, _err
  32. }
  33. // GetCamsAppId 获取 AppId
  34. // "LTAI5tSJwCQyuaxXR3UxfnWw", "0pv4xhSPJv9IPSxrkB52FspJk27W7V" "cams.ap-southeast-1.aliyuncs.com"
  35. func GetCamsAppId() (string, error) {
  36. client, _err := CreateCamsClient()
  37. if _err != nil {
  38. return "", _err
  39. }
  40. request := &cams20200606.IsvGetAppIdRequest{
  41. Type: tea.String("WHATSAPP"),
  42. }
  43. isvResponse, _err := client.IsvGetAppId(request)
  44. if _err != nil {
  45. return "", _err
  46. }
  47. return *isvResponse.Body.AppId, nil
  48. }
  49. // GetAutomation 获取号码欢迎消息、开场白和命令
  50. func GetAutomation(custSpaceId, phone string) (*cams20200606.GetConversationalAutomationResponse, error) {
  51. client, _err := CreateCamsClient()
  52. if _err != nil {
  53. return nil, _err
  54. }
  55. request := &cams20200606.GetConversationalAutomationRequest{
  56. CustSpaceId: tea.String(custSpaceId),
  57. PhoneNumber: tea.String(phone),
  58. }
  59. response, _err := client.GetConversationalAutomation(request)
  60. if _err != nil {
  61. return nil, _err
  62. }
  63. return response, nil
  64. }
  65. // SetAutomation 设置号码欢迎消息、开场白和命令
  66. func SetAutomation(custSpaceId, phone string, prompts []string) (*cams20200606.UpdateConversationalAutomationResponse, error) {
  67. client, _err := CreateCamsClient()
  68. if _err != nil {
  69. return nil, _err
  70. }
  71. tmpPrompts := make([]*string, 0)
  72. for _, v := range prompts {
  73. tmpPrompts = append(tmpPrompts, &v)
  74. }
  75. request := &cams20200606.UpdateConversationalAutomationRequest{
  76. CustSpaceId: tea.String(custSpaceId),
  77. PhoneNumber: tea.String(phone),
  78. Prompts: tmpPrompts,
  79. }
  80. response, _err := client.UpdateConversationalAutomation(request)
  81. if _err != nil {
  82. return nil, _err
  83. }
  84. return response, nil
  85. }
  86. // AddCamsPhoneNumber 添加WhatsApp号码
  87. func AddCamsPhoneNumber(phone, cc, custSpaceId, verifiedName string) (*cams20200606.AddChatappPhoneNumberResponse, error) {
  88. client, _err := CreateCamsClient()
  89. if _err != nil {
  90. return nil, _err
  91. }
  92. request := &cams20200606.AddChatappPhoneNumberRequest{
  93. PhoneNumber: tea.String(phone),
  94. Cc: tea.String(cc),
  95. CustSpaceId: tea.String(custSpaceId),
  96. VerifiedName: tea.String(verifiedName),
  97. }
  98. response, _err := client.AddChatappPhoneNumber(request)
  99. if _err != nil {
  100. return nil, _err
  101. }
  102. return response, nil
  103. }
  104. // SendCamsCode 发送验证码
  105. func SendCamsCode(phone, custSpaceId, method, locale string) (*cams20200606.GetChatappVerifyCodeResponse, error) {
  106. client, _err := CreateCamsClient()
  107. if _err != nil {
  108. return nil, _err
  109. }
  110. request := &cams20200606.GetChatappVerifyCodeRequest{
  111. PhoneNumber: tea.String(phone),
  112. CustSpaceId: tea.String(custSpaceId),
  113. Method: tea.String(method),
  114. Locale: tea.String(locale),
  115. }
  116. response, _err := client.GetChatappVerifyCode(request)
  117. if _err != nil {
  118. return nil, _err
  119. }
  120. return response, nil
  121. }
  122. // SubmitCamsCode 提交验证信息
  123. func SubmitCamsCode(phone, code, custSpaceId string) (*cams20200606.ChatappVerifyAndRegisterResponse, error) {
  124. client, _err := CreateCamsClient()
  125. if _err != nil {
  126. return nil, _err
  127. }
  128. request := &cams20200606.ChatappVerifyAndRegisterRequest{
  129. PhoneNumber: tea.String(phone),
  130. VerifyCode: tea.String(code),
  131. CustSpaceId: tea.String(custSpaceId),
  132. }
  133. response, _err := client.ChatappVerifyAndRegister(request)
  134. if _err != nil {
  135. return nil, _err
  136. }
  137. return response, nil
  138. }
  139. // GetCamsQrcode 获取二维码列表
  140. func GetCamsQrcode(phone, custSpaceId string) (*cams20200606.ListPhoneMessageQrdlResponse, error) {
  141. client, _err := CreateCamsClient()
  142. if _err != nil {
  143. return nil, _err
  144. }
  145. request := &cams20200606.ListPhoneMessageQrdlRequest{
  146. PhoneNumber: tea.String(phone),
  147. CustSpaceId: tea.String(custSpaceId),
  148. }
  149. response, _err := client.ListPhoneMessageQrdl(request)
  150. if _err != nil {
  151. return nil, _err
  152. }
  153. return response, nil
  154. }
  155. // CreateCamsQrcode 创建二维码
  156. func CreateCamsQrcode(phone, custSpaceId, generateQrImage, prefilledMessage string) (*cams20200606.CreatePhoneMessageQrdlResponse, error) {
  157. client, _err := CreateCamsClient()
  158. if _err != nil {
  159. return nil, _err
  160. }
  161. request := &cams20200606.CreatePhoneMessageQrdlRequest{
  162. PhoneNumber: tea.String(phone),
  163. CustSpaceId: tea.String(custSpaceId),
  164. GenerateQrImage: tea.String(generateQrImage),
  165. PrefilledMessage: tea.String(prefilledMessage),
  166. }
  167. response, _err := client.CreatePhoneMessageQrdl(request)
  168. if _err != nil {
  169. return nil, _err
  170. }
  171. return response, nil
  172. }
  173. // UpdateCamsQrcode 修改二维码
  174. func UpdateCamsQrcode(phone, custSpaceId, generateQrImage, prefilledMessag, qrdlCode string) (*cams20200606.UpdatePhoneMessageQrdlResponse, error) {
  175. client, _err := CreateCamsClient()
  176. if _err != nil {
  177. return nil, _err
  178. }
  179. request := &cams20200606.UpdatePhoneMessageQrdlRequest{
  180. PhoneNumber: tea.String(phone),
  181. CustSpaceId: tea.String(custSpaceId),
  182. GenerateQrImage: tea.String(generateQrImage),
  183. PrefilledMessage: tea.String(prefilledMessag),
  184. QrdlCode: tea.String(qrdlCode),
  185. }
  186. response, _err := client.UpdatePhoneMessageQrdl(request)
  187. if _err != nil {
  188. return nil, _err
  189. }
  190. return response, nil
  191. }
  192. // RemoveCamsQrcode 删除二维码
  193. func RemoveCamsQrcode(phone, custSpaceId, qrdlCode string) (*cams20200606.DeletePhoneMessageQrdlResponse, error) {
  194. client, _err := CreateCamsClient()
  195. if _err != nil {
  196. return nil, _err
  197. }
  198. request := &cams20200606.DeletePhoneMessageQrdlRequest{
  199. PhoneNumber: tea.String(phone),
  200. CustSpaceId: tea.String(custSpaceId),
  201. QrdlCode: tea.String(qrdlCode),
  202. }
  203. response, _err := client.DeletePhoneMessageQrdl(request)
  204. if _err != nil {
  205. return nil, _err
  206. }
  207. return response, nil
  208. }
  209. // GetCamsBusiness 获取商业信息
  210. func GetCamsBusiness(phone, custSpaceId string) (*cams20200606.QueryPhoneBusinessProfileResponse, error) {
  211. client, _err := CreateCamsClient()
  212. if _err != nil {
  213. return nil, _err
  214. }
  215. request := &cams20200606.QueryPhoneBusinessProfileRequest{
  216. PhoneNumber: tea.String(phone),
  217. CustSpaceId: tea.String(custSpaceId),
  218. }
  219. response, _err := client.QueryPhoneBusinessProfile(request)
  220. if _err != nil {
  221. return nil, _err
  222. }
  223. return response, nil
  224. }
  225. // SetCamsBusiness 获取商业信息
  226. func SetCamsBusiness(phone, custSpaceId, address, description, vertical, email, profilePicUrl, about string, websites []*string) (*cams20200606.ModifyPhoneBusinessProfileResponse, error) {
  227. client, _err := CreateCamsClient()
  228. if _err != nil {
  229. return nil, _err
  230. }
  231. request := &cams20200606.ModifyPhoneBusinessProfileRequest{
  232. PhoneNumber: tea.String(phone),
  233. CustSpaceId: tea.String(custSpaceId),
  234. Vertical: tea.String(vertical),
  235. }
  236. if vertical != "" && vertical != "UNDEFINED" {
  237. request.Vertical = tea.String(vertical)
  238. }
  239. if address != "" {
  240. request.Address = tea.String(address)
  241. }
  242. if description != "" {
  243. request.Description = tea.String(description)
  244. }
  245. if profilePicUrl != "" {
  246. request.ProfilePictureUrl = tea.String(profilePicUrl)
  247. }
  248. if email != "" {
  249. request.Email = tea.String(email)
  250. }
  251. if about != "" {
  252. request.About = tea.String(about)
  253. }
  254. if len(websites) > 0 {
  255. request.Websites = websites
  256. }
  257. fmt.Printf("request=%v\n", request)
  258. response, _err := client.ModifyPhoneBusinessProfile(request)
  259. if _err != nil {
  260. return nil, _err
  261. }
  262. return response, nil
  263. }
  264. // GetCamsPhoneVerifyStatus 查询号码验证状态
  265. func GetCamsPhoneVerifyStatus(phone, custSpaceId string) (*cams20200606.GetPhoneNumberVerificationStatusResponse, error) {
  266. client, _err := CreateCamsClient()
  267. if _err != nil {
  268. return nil, _err
  269. }
  270. request := &cams20200606.GetPhoneNumberVerificationStatusRequest{
  271. PhoneNumber: tea.String(phone),
  272. CustSpaceId: tea.String(custSpaceId),
  273. }
  274. response, _err := client.GetPhoneNumberVerificationStatus(request)
  275. if _err != nil {
  276. return nil, _err
  277. }
  278. return response, nil
  279. }
  280. // RegisterCamsPhoneNumber 号码注册
  281. func RegisterCamsPhoneNumber(phone, custSpaceId string) (*cams20200606.ChatappPhoneNumberRegisterResponse, error) {
  282. client, _err := CreateCamsClient()
  283. if _err != nil {
  284. return nil, _err
  285. }
  286. request := &cams20200606.ChatappPhoneNumberRegisterRequest{
  287. PhoneNumber: tea.String(phone),
  288. CustSpaceId: tea.String(custSpaceId),
  289. }
  290. response, _err := client.ChatappPhoneNumberRegister(request)
  291. if _err != nil {
  292. return nil, _err
  293. }
  294. return response, nil
  295. }
  296. // DeRegisterCamsPhoneNumber 号码取消注册
  297. func DeRegisterCamsPhoneNumber(phone, custSpaceId string) (*cams20200606.ChatappPhoneNumberDeregisterResponse, error) {
  298. client, _err := CreateCamsClient()
  299. if _err != nil {
  300. return nil, _err
  301. }
  302. request := &cams20200606.ChatappPhoneNumberDeregisterRequest{
  303. PhoneNumber: tea.String(phone),
  304. CustSpaceId: tea.String(custSpaceId),
  305. }
  306. response, _err := client.ChatappPhoneNumberDeregister(request)
  307. if _err != nil {
  308. return nil, _err
  309. }
  310. return response, nil
  311. }
  312. // QueryCamsChatappPhoneNumbers 查询客户下的所有发送号码及号码状态
  313. func QueryCamsChatappPhoneNumbers(custSpaceId string) (*cams20200606.QueryChatappPhoneNumbersResponse, error) {
  314. client, _err := CreateCamsClient()
  315. if _err != nil {
  316. return nil, _err
  317. }
  318. request := &cams20200606.QueryChatappPhoneNumbersRequest{
  319. CustSpaceId: tea.String(custSpaceId),
  320. }
  321. response, _err := client.QueryChatappPhoneNumbers(request)
  322. if _err != nil {
  323. return nil, _err
  324. }
  325. return response, nil
  326. }
  327. // ChatappSyncPhoneNumber 同步号码信息
  328. func ChatappSyncPhoneNumber(custSpaceId string) (*cams20200606.ChatappSyncPhoneNumberResponse, error) {
  329. client, _err := CreateCamsClient()
  330. if _err != nil {
  331. return nil, _err
  332. }
  333. request := &cams20200606.ChatappSyncPhoneNumberRequest{
  334. CustSpaceId: tea.String(custSpaceId),
  335. }
  336. response, _err := client.ChatappSyncPhoneNumber(request)
  337. if _err != nil {
  338. return nil, _err
  339. }
  340. return response, nil
  341. }
  342. // UpdatePhoneWebhook 修改号码回调
  343. func UpdatePhoneWebhook(phone, custSpaceId, callback string) (*cams20200606.UpdatePhoneWebhookResponse, error) {
  344. client, _err := CreateCamsClient()
  345. if _err != nil {
  346. return nil, _err
  347. }
  348. request := &cams20200606.UpdatePhoneWebhookRequest{
  349. CustSpaceId: tea.String(custSpaceId),
  350. PhoneNumber: tea.String(phone),
  351. //StatusCallbackUrl: tea.String(callback),
  352. UpCallbackUrl: tea.String(callback),
  353. HttpFlag: tea.String("Y"),
  354. }
  355. response, _err := client.UpdatePhoneWebhook(request)
  356. if _err != nil {
  357. return nil, _err
  358. }
  359. return response, nil
  360. }
  361. // ListChatappTemplate 获取模板列表
  362. func ListChatappTemplate(waId, name, language, auditStatus, templateType, code string, page, size int32) (*cams20200606.ListChatappTemplateResponse, error) {
  363. client, _err := CreateCamsClient()
  364. if _err != nil {
  365. return nil, _err
  366. }
  367. request := &cams20200606.ListChatappTemplateRequest{
  368. CustSpaceId: tea.String(waId),
  369. Name: tea.String(name),
  370. Language: tea.String(language),
  371. AuditStatus: tea.String(auditStatus),
  372. Page: &cams20200606.ListChatappTemplateRequestPage{
  373. Index: tea.Int32(page),
  374. Size: tea.Int32(size),
  375. },
  376. TemplateType: tea.String(templateType),
  377. Code: tea.String(code),
  378. }
  379. response, _err := client.ListChatappTemplate(request)
  380. if _err != nil {
  381. return nil, _err
  382. }
  383. return response, nil
  384. }
  385. // GetChatappTemplateInfo 获取模板详情
  386. func GetChatappTemplateInfo(name, language, templateType, templateCode string) (*cams20200606.GetChatappTemplateDetailResponse, error) {
  387. client, _err := CreateCamsClient()
  388. if _err != nil {
  389. return nil, _err
  390. }
  391. request := &cams20200606.GetChatappTemplateDetailRequest{
  392. TemplateName: tea.String(name),
  393. Language: tea.String(language),
  394. TemplateType: tea.String(templateType),
  395. TemplateCode: tea.String(templateCode),
  396. }
  397. response, _err := client.GetChatappTemplateDetail(request)
  398. if _err != nil {
  399. return nil, _err
  400. }
  401. return response, nil
  402. }
  403. // DeleteChatappTemplate 模板删除
  404. func DeleteChatappTemplate(name, language, templateType, templateCode string) (*cams20200606.DeleteChatappTemplateResponse, error) {
  405. client, _err := CreateCamsClient()
  406. if _err != nil {
  407. return nil, _err
  408. }
  409. request := &cams20200606.DeleteChatappTemplateRequest{
  410. TemplateName: tea.String(name),
  411. Language: tea.String(language),
  412. TemplateType: tea.String(templateType),
  413. TemplateCode: tea.String(templateCode),
  414. }
  415. response, _err := client.DeleteChatappTemplate(request)
  416. if _err != nil {
  417. return nil, _err
  418. }
  419. return response, nil
  420. }
  421. // SendChatappMessage 发送消息
  422. // @see https://help.aliyun.com/zh/chatapp/developer-reference/api-cams-2020-06-06-sendchatappmessage
  423. func SendChatappMessage(stype, messageType, templateCode, lang, sfrom, sto, stext string) (*cams20200606.SendChatappMessageResponse, error) {
  424. client, _err := CreateCamsClient()
  425. if _err != nil {
  426. return nil, _err
  427. }
  428. var content = map[string]interface{}{
  429. "text": stext,
  430. }
  431. scontext, _ := json.Marshal(content)
  432. request := &cams20200606.SendChatappMessageRequest{
  433. ChannelType: tea.String("whatsapp"),
  434. Type: tea.String(stype),
  435. MessageType: tea.String(messageType),
  436. TemplateCode: tea.String(templateCode),
  437. Language: tea.String(lang),
  438. From: tea.String(sfrom),
  439. To: tea.String(sto),
  440. Content: tea.String(string(scontext)),
  441. }
  442. response, _err := client.SendChatappMessage(request)
  443. if _err != nil {
  444. return nil, _err
  445. }
  446. return response, nil
  447. }
  448. // SendBatchChatappMessage 发送批量消息
  449. // @see https://help.aliyun.com/zh/chatapp/developer-reference/api-cams-2020-06-06-sendchatappmassmessage
  450. func SendBatchChatappMessage(templateCode, lang, sfrom string, sto []string) (*cams20200606.SendChatappMassMessageResponse, error) {
  451. client, _err := CreateCamsClient()
  452. if _err != nil {
  453. return nil, _err
  454. }
  455. senderList := make([]*cams20200606.SendChatappMassMessageRequestSenderList, len(sto))
  456. for _, v := range sto {
  457. senderList = append(senderList, &cams20200606.SendChatappMassMessageRequestSenderList{
  458. To: &v,
  459. })
  460. }
  461. request := &cams20200606.SendChatappMassMessageRequest{
  462. ChannelType: tea.String("whatsapp"),
  463. TemplateCode: tea.String(templateCode),
  464. Language: tea.String(lang),
  465. From: tea.String(sfrom),
  466. SenderList: senderList,
  467. }
  468. response, _err := client.SendChatappMassMessage(request)
  469. if _err != nil {
  470. return nil, _err
  471. }
  472. return response, nil
  473. }