1 votes

google wave OnBlipSubmitted

J'essaie de créer un robot ondulatoire, et j'ai les éléments de base qui fonctionnent. J'essaie de créer un nouveau blip avec un texte d'aide lorsque quelqu'un tape @help mais pour une raison quelconque, il ne le crée pas. Je n'obtiens aucune erreur dans la console d'enregistrement, et je vois le journal d'information 'in @log'.

def OnBlipSubmitted(properties, context):
  # Get the blip that was just submitted.
  blip = context.GetBlipById(properties['blipId'])
  text = blip.GetDocument().GetText()
  if text.startswith('@help') == True:
    logging.info('in @help')
    blip.CreateChild().GetDocument().SetText('help text')

1voto

Willi Ballenthin Points 2768

Si ça vient de commencer à fonctionner, j'ai deux suggestions...

-->Avez-vous mis à jour la version du robot dans le constructeur ? Vous devez changer les valeurs au fur et à mesure des modifications afin que les caches puissent être mis à jour.

if __name__ == '__main__':                                          
    myRobot = robot.Robot('waverobotdev',
                           image_url = baseurl + 'assets/wave_robot_icon.png',
                           version = '61',  # <-------------HERE
                           profile_url = baseurl)

-->La connexion du serveur entre Wave et AppSpot a récemment été extrêmement variable. Parfois, il faut plus de 10 minutes pour que le serveur AppSpot reçoive mon événement, d'autres fois quelques secondes. Vérifiez que vous recevez les événements que vous attendez.

Éditer : Le code que vous avez fourni semble bon, donc je ne pense pas que vous fassiez quelque chose de mal à cet égard.

0voto

Jon Skeet Points 692016

Avez-vous essayé d'utiliser Append() au lieu de SetText() ? C'est ce que je ferais dans mon API C#. Je n'ai pas utilisé l'API Python, mais j'imagine que c'est similaire. Voici un échantillon de mon robot de démonstration :

protected override void OnBlipSubmitted(IEvent e)
{
    if (e.Blip.Document.Text.Contains("robot"))
    {
        IBlip blip = e.Blip.CreateChild();
        ITextView textView = blip.Document;
        textView.Append("Are you talking to me?");
    }
}

Cela fonctionne bien.

EDIT : Voici le JSON résultant du code ci-dessus :

{
  "javaClass": "com.google.wave.api.impl.OperationMessageBundle",
  "version": "173784133",
  "operations": {
    "javaClass": "java.util.ArrayList",
    "list": [
      {
        "javaClass": "com.google.wave.api.impl.OperationImpl",
        "type": "BLIP_CREATE_CHILD",
        "waveId": "googlewave.com!w+PHAstGbKC",
        "waveletId": "googlewave.com!conv+root",
        "blipId": "b+Iw_Xw7FCC",
        "index": -1,
        "property": {
          "javaClass": "com.google.wave.api.impl.BlipData",
          "annotations": {
            "javaClass": "java.util.ArrayList",
            "list": []
          },
          "lastModifiedTime": -1,
          "contributors": {
            "javaClass": "java.util.ArrayList",
            "list": []
          },
          "waveId": "googlewave.com!w+PHAstGbKC",
          "waveletId": "googlewave.com!conv+root",
          "version": -1,
          "parentBlipId": null,
          "creator": null,
          "content": "\nAre you talking to me?",
          "blipId": "410621dc-d7a1-4be5-876c-0a9d313858bb",
          "elements": {
            "map": {},
            "javaClass": "java.util.HashMap"
          },
          "childBlipIds": {
            "javaClass": "java.util.ArrayList",
            "list": []
          }
        }
      },
      {
        "javaClass": "com.google.wave.api.impl.OperationImpl",
        "type": "DOCUMENT_APPEND",
        "waveId": "googlewave.com!w+PHAstGbKC",
        "waveletId": "googlewave.com!conv+root",
        "blipId": "410621dc-d7a1-4be5-876c-0a9d313858bb",
        "index": 0,
        "property": "Are you talking to me?"
      }
    ]
  }
}

Comment cela se compare-t-il avec le JSON qui sort de votre robot ?

0voto

user140736 Points 504

Pour une raison quelconque, ça a commencé à fonctionner. Je pense que les ondes de google sont irrégulières.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X