微信扫码
与创始人交个朋友
我要投稿
“ dify默认是不可以直接使用验证码短信服务的,如果你想要用短信服务,你就得用云函数写一个api服务进行调用。”
本文教程目录:
用阿里云FC云函数手搓一个验证码短信api服务;
讲解短信api在工作流中使用思路。
01
—
手搓一个验证码短信api服务
首先你得用阿里云账号去购买短信资源包,然后申请签名并通过。
第一步:创建一个云函数
第二步:为函数安装阿里云短信官方依赖包
点击“terminal”,再点击“new terminal”,输入pip安装指令,如下所示:
pip install -t . alibabacloud_dysmsapi20170525==3.0.0
第三步:输入源码
本文示例为了方便大家快速体验,提供一个我个人手搓的源码给大家(编程水准有限,大家不要笑话我)
from flask import Flask, request, jsonify
import os
import json
from typing import List
from alibabacloud_dysmsapi20170525.client import Client as Dysmsapi20170525Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dysmsapi20170525 import models as dysmsapi_20170525_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
REQUEST_ID_HEADER = 'x-fc-request-id'
app = Flask(__name__)
class Sample:
def create_client() -> Dysmsapi20170525Client:
config = open_api_models.Config(
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
config.endpoint = 'dysmsapi.aliyuncs.com'
return Dysmsapi20170525Client(config)
def send_sms():
try:
data = request.get_json()
phone_numbers = data.get('phone_numbers')
sign_name = data.get('sign_name')
template_code = data.get('template_code')
template_param_code = data.get('template_param_code')
if not all([phone_numbers, sign_name, template_code, template_param_code]):
return jsonify({"error": "All fields are required"}), 400
client = Sample.create_client()
send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
phone_numbers=phone_numbers,
sign_name=sign_name,
template_code=template_code,
template_param=f'{{"code":"{template_param_code}"}}'
)
runtime = util_models.RuntimeOptions()
response = client.send_sms_with_options(send_sms_request, runtime)
return jsonify({"message": "SMS sent successfully", "response": response.to_map()}), 200
except Exception as error:
print(error)
return jsonify({"error": str(error)}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=9000)
删除掉系统自带的示例代码,复制上述源码并粘贴进去,点击“部署代码”等待完成。
第四步:按照上次的教程,设置好虚拟环境变量和http触发器即可。
【附案例】阿里云FC云函数做成api服务接入到dify中
02
—
短信验证码在dify中的应用思路
在谈应用之前,我必须要给大家普及一下验证码服务必需的参数都是干什么的:
phone_numbers:接收验证码短信的手机号码,一般是用户的手机号码
sign_name:你在阿里云申请通过的短信签名
template_code:短信内容模版,阿里云有系统默认的验证码模版,如SMS_153660285
template_param_code:验证码,4~6位长度的随机整数,这个整数可以在工作流中用代码节点随机生成
接下来就是工作流中使用http节点了:
发送之后,短信收到的就是这样的。
注意事项:
验证码的随机数生成之后,建议大家用会话变量临时存储起来,当用户输入收到的验证码,再用代码节点写个简单的对比脚本进行验证,验证通过了,才可以执行另外的工作流。
核心逻辑:
创建两个会话变量,分别是state、code。
state变量:默认值为0,表示当前未通过验证
code变量:存储生成的验证码
先用条件判断读取state变量,如果为0,就要求用户输入手机号码,执行http节点,将随机生成的验证码存到code变量中;
再要求用户输入收到的验证码,用代码节点比较code,如果一致,就用变量赋值节点修改state变量值为1,表示已经通过了验证。只有验证通过的会话才能执行另外的工作流分支。
好了,就讲这么多吧,其实很简单,关键是短信验证码的api服务,你需要通过阿里云FC云函数部署好,然后用dify调用就行。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-04-25
2024-04-24
2024-07-20
2024-07-16
2024-05-08
2024-05-07
2024-05-09
2024-06-21
2024-04-25
2024-08-06