whatsapp.go 15 KB

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