You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

企业环境下使用python-bot-sdk创建Dialog机器人端点时的代理DNS解析失败问题求助

解决企业代理环境下Dialog Bot SDK DNS解析失败的问题

我之前在企业代理环境里折腾gRPC服务连接时,也碰到过一模一样的DNS解析失败问题,给你几个实用的解决方向:

1. 直接使用IP地址绕过DNS解析

如果你的代理环境无法正常解析hackathon-mob.transmit.im的域名,最直接的办法是跳过DNS查询,直接用目标服务器的IP地址连接。

步骤:

  • 先通过nslookup hackathon-mob.transmit.im或者在线DNS查询工具获取该域名的实际IP地址(比如假设查到的IP是192.0.2.1
  • 修改你的机器人初始化代码,用IP替换域名,同时添加grpc.ssl_target_name_override选项(因为SSL证书是绑定原域名的,必须指定这个参数才能通过证书验证)

修改后的代码示例:

from dialog_bot_sdk.bot import DialogBot
import grpc

def on_msg(*params):
    print('on msg', params)
    bot.messaging.send_message(
        params[0].peer,
        'Reply to : ' + str(params[0].message.textMessage.text)
    )

if __name__ == '__main__':
    # 替换成实际查到的IP地址,端口默认443
    server_ip = '192.0.2.1:443'
    bot = DialogBot.get_secure_bot(
        server_ip,
        grpc.ssl_channel_credentials(),
        'PUT YOUR BOT TOKEN HERE',
        verbose=False,
        # 添加SSL目标名称覆盖,匹配原域名
        channel_options=[
            ('grpc.ssl_target_name_override', 'hackathon-mob.transmit.im'),
        ]
    )
    bot.messaging.on_message(on_msg)

2. 配置gRPC使用企业代理

企业代理环境下,gRPC默认不会自动读取系统代理设置,需要显式配置代理信息:

方法一:设置环境变量

在代码开头添加代理环境变量的配置(替换成你的企业代理地址和端口):

import os
# 替换为你的企业代理地址
os.environ['HTTP_PROXY'] = 'http://your-proxy-host:proxy-port'
os.environ['HTTPS_PROXY'] = 'http://your-proxy-host:proxy-port'

# 原有的机器人代码
from dialog_bot_sdk.bot import DialogBot
import grpc

def on_msg(*params):
    print('on msg', params)
    bot.messaging.send_message(
        params[0].peer,
        'Reply to : ' + str(params[0].message.textMessage.text)
    )

if __name__ == '__main__':
    bot = DialogBot.get_secure_bot(
        'hackathon-mob.transmit.im',
        grpc.ssl_channel_credentials(),
        'PUT YOUR BOT TOKEN HERE',
        verbose=False
    )
    bot.messaging.on_message(on_msg)

方法二:通过gRPC Channel Options指定代理

如果环境变量设置无效,可以直接在创建Bot时指定代理选项:

from dialog_bot_sdk.bot import DialogBot
import grpc

def on_msg(*params):
    print('on msg', params)
    bot.messaging.send_message(
        params[0].peer,
        'Reply to : ' + str(params[0].message.textMessage.text)
    )

if __name__ == '__main__':
    bot = DialogBot.get_secure_bot(
        'hackathon-mob.transmit.im',
        grpc.ssl_channel_credentials(),
        'PUT YOUR BOT TOKEN HERE',
        verbose=False,
        channel_options=[
            # 替换为你的企业代理地址
            ('grpc.http_proxy', 'http://your-proxy-host:proxy-port'),
        ]
    )
    bot.messaging.on_message(on_msg)

3. 检查企业DNS配置(备选)

如果上述方法都不行,可能是企业内部DNS服务器无法解析外部域名,可以联系IT部门确认:

  • 是否允许访问hackathon-mob.transmit.im这个域名
  • 是否需要配置内部DNS服务器地址来解析外部域名

建议先尝试前两种方法,尤其是直接用IP的方式,通常能快速解决DNS解析失败的问题。

内容的提问来源于stack exchange,提问作者Artem Ermakov

火山引擎 最新活动