Python xmpppy客户端未向appengine xmpp客户端发送消息

Posted

技术标签:

【中文标题】Python xmpppy客户端未向appengine xmpp客户端发送消息【英文标题】:Python xmpppy client not sending message to appengine xmpp client 【发布时间】:2011-01-06 04:19:54 【问题描述】:

大家好, 在向应用引擎的 xmpp 客户端发送消息时,我似乎无法使用 xmpppy 客户端。 我没有收到任何错误。消息只是没有到达那里。 从应用引擎的客户端向 sl4a 客户端发送消息是可行的。 向 sl4a 客户端和从 google talk 客户端发送消息也可以正常工作。

任何帮助将不胜感激。

这是python代码

import xmpp
import time

_SERVER = 'talk.google.com', 5223
commandByXMPP()

def commandByXMPP():
  global xmppUsername
  xmppUsername = 'garrowsbot@gmail.com'  
  global xmppPassword
  xmppPassword = 'obscured'  
  global xmppClient
  global operator
  operator = "cellbotmote@appspot.com"

  jid = xmpp.protocol.JID(xmppUsername)
  xmppClient = xmpp.Client(jid.getDomain(), debug=[])
  xmppClient.connect(server=_SERVER)
  try:
    xmppClient.RegisterHandler('message', XMPP_message_cb)
  except:
    exitCellbot('XMPP error. You sure the phone has an internet connection?')
  if not xmppClient:
    exitCellbot('XMPP Connection failed!')
    return
  auth = xmppClient.auth(jid.getNode(), xmppPassword, 'botty')
  if not auth:
    exitCellbot('XMPP Authentication failed!')
    return
  xmppClient.sendInitPresence()
  print "XMPP username for the robot is:\n" + xmppUsername

  start=time.time()
  i=0
  try:
    outputToOperator("starting")
    while time.time()-start<15:
      print "tick"
      xmppClient.Process(1)
      i = i +1
      if i % 10 == 0:
        outputToOperator("hello")
    outputToOperator("exiting")
  except KeyboardInterrupt:
    pass


def XMPP_message_cb(session, message):
  jid = xmpp.protocol.JID(message.getFrom())
  global operator
  command = message.getBody()
  print command

def outputToOperator(msg):
  print "Outputting "+msg+" to " + operator
  xmppClient.send(xmpp.Message(operator, msg))

【问题讨论】:

【参考方案1】:

1) 检查 garrowsbot@gmail.com 是否在 cellbotmote@appspot.com 的名单上。 GTalk 不会传递来自未知用户的消息。 2) 发送聊天类型的消息:

xmppClient.send(xmpp.Message(operator, msg, typ='chat'))

某些客户端对接收没有type 属性的“正常”消息反应不佳。

【讨论】:

谢谢乔。我一直试图追捕这个大约一个星期。非常感谢你的好先生。 抱歉回复缓慢。我必须指定类型。虽然他是对的,但你需要确保他们在彼此的名单上。

以上是关于Python xmpppy客户端未向appengine xmpp客户端发送消息的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 xmpppy 向 jabber 客户端发送消息?

如何使用 python 和 XMPPPY 自动接受订阅?

安装 xmpppy python 库和识别模块时遇到问题

如何使用 python xmpppy 获取 XMPP 服务器中所有 MUC 的列表?

如何使用 xmpp 和 Python xmpppy 发送多播消息(多个用户)(XEP-0033:扩展节寻址)

XMPPPY 与 Openfire