IM Control & Presence API : Il Messenger all'interno delle nostre pagine web

 

Tra i servizi offerti dalla piattaforma Windows Live è stato da poco rilasciato un nuovo controllo che permette di inserire in una pagina Web le funzionalità del Messenger (IM Control) e un nuovo set di Presence API per l'accesso via servizio HTTP .

 Per quanto riguarda l'IM Control ecco di seguito come si presenta il controllo inserito in una pagina vuota di esempio.

 

image

 

 

Inserire il controllo permette di aggiungere ad un sito le funzionalità di presenza e instant messaging verso uno specifico contatto. Interessante ad esempio per siti dove vogliamo arricchire le pagine del profili all'interno di una community dando la possibilità di entrare in contatto con il proprietario del profilo . Può essere usato per inserire il contatto che corrisponde a un Boat Messenger ho altre interessanti applicazioni.

Il controllo viene inserito come un IFRAME nella pagina ospite che punta ad una specifica pagina di Windows Live , passando i parametri necessari a stabilire il contatto e l'aspetto grafico del controllo. L'utilizzo  non comporta nessun tipo di particolare prerequisito nel client che accede alla pagina Web. Il controllo può essere usato anche in modo anonimo e  anche se il client non ha il Messenger installato localmente in quanto usa essenzialmente HTML e JS e rende possibile conoscere lo stato di presenza in internet del conttto messenger su cui è configurato e permette anche di spedirgli dei messaggi.

 

Per provare il controllo come prima cosa occorre autorizzare attraverso la pagina di settings del Messenger la visualizzazione dello stato di presenza da parte del contatto anche dalle pagine web in cui inseriremo il controllo. Dopo essersi autenticati con il Live Id associato al contatto che si vuole abilitare si visualizza la seguente pagina di autorizzazione:

image

 

 

Dopo aver abilitato l'accesso ai website allo stato del nostro contatto, si  prosegue con il link "create HTML" e si arriva nella pagina che consente la generazione dell'IFRAME  con i riferimenti al nostro Id Messenger e ci consente di scegliere l'aspetto grafico e funzionale del controllo:

image

 

Selezionato il tipo e l'aspetto grafico desiderato possiamo copiare il IFRAME generato che contiene il riferimento all'ID del contatto per poterlo inserire nella nostra pagina HTML ottenendo cosi l'inserimento del controllo.

Dall' IM control è possibile direttamente inviare e riceve messaggi verso lo specifico contatto. PROVARE PER CREDERE.....

 

Come accennato in precedenza le informazioni sulla presenza in rete del nostro contatto oltre che tramite il controllo sono anche accessibili attraverso un web service denominato Presence API utilizzabile via HTTP .

Le Presence API consentono inoltre di effettuare l'invito all'utente per ottenere l'autorizzazione all'utilizzo da parte dei website della presence e l'id necessario ad accedere in via programmatica  o per inserire dinamicamente il controllo nella pagina.

Per effettuare all'utente l'invito ad autorizzare l'accesso e fornire l'id si utilizza un URL con la seguente sintassi:

 https://settings.messenger.live.com/applications/websignup.aspx?returnurl=[URL]&privacyurl=[URL] 

in returnurl va inserito l'URL a cui il servizio Presence effettuerà la redirect fornendoci in risposta se l'utente ha autorizzato o meno l'utilizzo della sua presence e l' identificativo che ci permette di andare ad interrogare le Presence API stessa per ottenere le informazioni sulla presenza del nostro contatto via JS o di inserire un IFRAME per il controllo utilizzando l'id ottenuto. Con privacyurl possiamo indicare l'url di una nostra pagina per inserire informazioni\ disclaimer  relative alla privacy dl nostro sito rispetto all'utilizzo delle informazioni di Presence.

Di seguito un esempio del formato dell'ID che si ottiene in caso di autorizzazione:

12BACD345678@apps.messenger.live.com

 

Per provare la pagina di invito all'autorizzazione per l'utilizzo delle Presence API ho preparato un piccolo esempio composto da una pagina dalla quale parte l'invito e una pagina che riceve le informazioni di risposta e dopo averle estratte le scrive nella sessione e genera direttamente un IFRAME per mostrare un IM control collegato all'utente invitato.

La prima pagina mostra il link per l'invito:

image

 

Al click sul link accedo alla pagina di autenticazione di Live Id . Nel caso in cui il nostro contatto sia già autenticato con Windows Live Id, l'autenticazione non viene richiesta nuovamente e si passa direttamente alla pagina di autorizzazione :

image

 

Autenticazione con Live Id e successivo accesso alla pagina di autorizzazione:

image

 

Successivo redirect con passaggio dell'autorizzazione e dell'id del contatto e comparsa del controllo nella pagina:

image

 

 

Di seguito il codice C# della pagina che estrae le info di autorizzazione e l'id delcontatto inserendo dinamicamente l'IFRAME per l'IM Control:

 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class PresenceInvitation : System.Web.UI.Page
{
    string result = "";
   string userId = "";

    protected void Page_Load(object sender, EventArgs e)
    {
      if (!IsPostBack)
      {
         // Go through and extract the returned QueryString values.
         System.Collections.Specialized.NameValueCollection returnParams = Request.QueryString;

         for (int i = 0; i < returnParams.AllKeys.Length; i++)
         {
            String nextKey = returnParams.AllKeys[i];
            if (nextKey == "result")
               result = returnParams[i];
            else if (nextKey == "id")
               userId = returnParams[i];
         }
         // If the result is success, save values to session.
         if ((result == "Accepted") && (userId != null))
         {
            // Save result data to the session.
            Session["Result"] = result;
            Session["Id"] = userId;
            // Display the result data.
            lblReturn.Text = "Result: " + result + ", User ID: " + userId;

            Response.Write("<iframe src='https://settings.messenger.live.com/Conversation/IMMe.aspx?invitee=" + userId + "&mkt=en-US&useTheme=true&foreColor=333333&backColor=FDC098&linkColor=333333&borderColor=FB8233&buttonForeColor=333333&buttonBackColor=FFC9A5&buttonBorderColor=FB8233&buttonDisabledColor=FFC9A5&headerForeColor=333333&headerBackColor=FC9E60&menuForeColor=333333&menuBackColor=FFFFFF&chatForeColor=333333&chatBackColor=FFFFFF&chatDisabledColor=F6F6F6&chatErrorColor=760502&chatLabelColor=6E6C6C' width='300' height='300' style='border: solid 1px black; width: 300px; height: 300px;' frameborder='0'></iframe>");
         }
         // If the result does not succeed, display an error.
         else if (result != "Accepted")
         {
            if (result == "Declined")
               lblReturn.Text = "[" + result + "]" + " User permissions were declined.";
            else if (result == "NoPrivacyUrl")
               lblReturn.Text = "[" + result + "]" + " No privacy URL was supplied.";
         }
      }
   }

    }

 

Ovviamente l'id del contatto può essere memorizzato nel database del nostro sito Web in associazione al profilo dell'utente e riutilizzato senza richiedere ogni volta l'autorizzazione e prevedendo le opzioni per consentire la revoca all'utente.

 Ulteriori informazioni su IM control a https://dev.live.com/messenger/  per le Presence API https://msdn2.microsoft.com/en-us/library/bb936691.aspx.