
# 对接SMN实现短信发送功能
#### 背景信息
通过应用与华为云的消息通知服务SMN（Simple Message Notification）对接，实现短信发送功能。
#### 场景描述
给某手机号码发送条短信，短信内容为："Hi Lily!"。
 #### 前提条件
- 已在华为云的消息通知服务SMN注册账号，并获取"IAM用户名"、"账号名"、所用SMN资源对应的"项目ID"、"项目"。
  图1获取关键信息   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886816.png "点击放大") 
- 已获取AK（Access Key ID）、SK（Secret Access Key），即访问密钥对，具体操作请参见[获取AK/SK](https://support.huaweicloud.com/devg-apisign/api-sign-provide-aksk.html)。
 
#### 新建SMN连接器
1. 参考[创建连接器入口](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0653.html#astrozero_05_0653__section54416265268)中操作，进入创建连接器页面。
2. 在左侧列表中，选择"消息通知 \> 消息通知服务SMN"，单击"+"。 
   图2新建SMN连接器   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960125577.png "点击放大")
   
   
3. 设置SMN对接参数，单击"保存"。 
   对接SMN有密钥模式和用户名密码模式两种，请根据实际业务需求进行选择。
   图3密钥模式   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933046240.png "点击放大")
   - 名称：连接器的名称，在服务编排中选用连接器时的一个标识。
   
   - 访问密钥：用户的访问密钥ID（Access Key ID），配置为[前提条件]中获取的"AK"取值。
   
   - 密钥：用户的访问密钥（Secret Access Key），配置为[前提条件]中获取的"SK"取值。
   
   - 项目ID：项目的唯一标识，配置为[前提条件]中获取的"项目ID"取值。
   
   - 区域：SMN服务的区域。
   
   - 描述：连接器的描述信息。
   
   - 打包当前配置：默认为选中，对信息敏感的场景，建议不勾选。 选中该选项后，应用打包时会将当前配置的连接器信息一并打出。例如，如果应用包发布到运行环境，当前配置默认会被同步到运行环境中。
     
    
   图4用户名密码模式   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886836.png "点击放大")
   - 名称：连接器的名称，在服务编排中选用连接器时的一个标识。
   
   - 账号名：登录消息通知服务SMN的账号名。请与[前提条件]中获取的"账号名"取值保持一致。
   
   - 项目名：所用SMN资源对应区域的项目名。请与[前提条件]中获取的"项目"取值保持一致。
   
   - 用户名：使用消息通知服务SMN的用户名。请与[前提条件]中获取的"IAM用户名"取值保持一致。
   
   - 密码：登录消息通知服务SMN的用户密码。
   
   - 项目ID：项目的唯一标识。请与[前提条件]中获取的"项目ID"取值保持一致。
   
   - 用户类型：新建连接器所属的用户类型。
   
   - 签发ID：短信内容中，包含的短信签名对应的ID。当"用户类型"为"企业用户"时，该参数可见且需要配置。请从SMN获取，不填默认为华为云企业用户。
   
   - 区域：SMN服务的区域。
   
   - 描述：连接器的描述信息。
   
   - 打包当前配置：默认为选中，对信息敏感的场景，建议不勾选。 选中该选项后，应用打包时会将当前配置的连接器信息一并打出。例如，如果应用包发布到运行环境，当前配置默认会被同步到运行环境中。
     
   
   
   
   
4. （可选）测试是否能发送短信。 
   1. 在连接器详情页面，单击"发送测试"。
   
   2. 输入接收者手机号码和短信内容，单击"发送"。 接收者收到短信，表示测试成功。
      
   
   
   
   
 
#### 在服务编排中调用连接器
在服务编排中，调用连接器，实现与华为云的消息通知服务SMN的对接。
1. 参考[如何开发服务编排](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0601.html)中操作，创建一个空白服务编排。
   
   图5添加服务编排   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960125565.png "点击放大")
   
   
2. 在服务编排设计页面左侧，选择"连接器 \> 消息通知"，拖拽"SMN"图元至画布中。 
   SMN是系统预置的，与SMN对接的短信发送接口。
   图6拖拽SMN图元至画布中   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960125569.png "点击放大")
   
   
3. 选中SMN图元，设置基本信息。 
   图7基本信息   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886812.png "点击放大")
   - 标签：图元在页面显示的名称。
   
   - 名称：图元在系统中的唯一标识，不能和其他图元相同。
   
   - 连接器：该服务编排使用的连接器的名称。
   
   
   
   
4. 单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960125573.png)，设置调用SMN参数。
   
   图8配置SMN   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886824.png "点击放大")
   - 动作：设置为"SMSSendSMS"，是系统预置的短信发送接口。
   
   - 输入参数：设置接口的输入参数。
     - "目标"设置为"endPoint"时：请在"源"中，配置短信接收者手机号，可定义为一个输入型变量"{!Phone}"。
     
     - "目标"设置为"message"时：请在"源"中，配置短信内容，可定义为一个输入型变量"{!Message}"。
      
   
   - 输出参数：设置接口的输出参数。"源"设置为"result"，"目标"用于接收短信发送结果（是否成功发送），必须定义一个空实例的结构变量来进行接收。
   
   
   
   
5. 在服务编排页面左侧，选择"逻辑"，拖拽"决策"图元至画布中。 
   决策是对当前条件进行判断，根据判断的结果决定执行何种操作，类似if语句的判断。
   当短信发送成功时，系统会将"resCode"赋值为"0"，这里创建Decision判断"resCode"是否为"0"，来输出发送是否成功的标识（例如"sendFlag"）从而进行后续操作。
   1. 单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933046268.png)，单击公式后的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886872.png)，增加"GetResultCode"公式变量，表达式为"GET({!result},"resCode")"，用于接收短信发送结果。
      图9配置"GetResultCode"公式变量   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886840.png "点击放大") 
   
   2. 配置"决策"的成功分支，即success表示"resCode"为"0"，短信发送成功分支。
      图10配置"决策"成功分支   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886876.png "点击放大") 
   
   3. 配置"决策"的失败分支，即error表示其他分支，即短信发送失败。
      图11配置"error"分支   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933046256.png "点击放大") 
   
   
   
   
6. 在服务编排页面左侧，选择"逻辑"，拖拽"赋值"图元至画布中，并进行配置。 
   创建一个普通变量"sendFlag"。赋值是创建变量的图元，主要作用是给变量赋值。这里增加符合"success"分支的操作，短信发送成功，输出成功标识。
   1. 单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960285397.png)，单击变量后的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933046232.png)，新建一个普通变量"sendFlag"。
   
   2. 单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960285401.png)，配置符合"success"的赋值操作。
   
   
   图12赋值   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960125597.png "点击放大")
   
   
7. 单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960285377.png)，配置符合"error"的赋值操作。
   
   图13配置赋值操作   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886828.png "点击放大")
   
   
8. 如[图14]所示，连接所有图元。
   
   图14连接元素   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960285369.png "点击放大")
   
   
9. 单击服务编排设计页面空白区域，选择![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960125521.png)，设置服务编排入参和出参。
   
   图15设置服务编排入参和出参   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886808.png "点击放大")
   
   
10. 单击页面上方的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886832.png)，保存服务编排。
11. 保存成功后，单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886884.png)，运行服务编排。
12. 设置输入参数（接收者号码和短信内容），单击"运行"。 
    图16运行服务编排   
    ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960125553.png)
    如[图17]所示，表示发送成功。
    图17发送成功   
    ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886848.png "点击放大")
    
    
 
