Skype for Business einbinden

  • VB.NET

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von Sub7evenHH.

    Skype for Business einbinden

    Hi,

    ist es möglich Skype in eine VB.Net Anwendung einzubinden und eingehende Anrufe darüber zu dokumentieren? Auf der Dev Skype Seite, finde ich leider nichts. Einen Verweis in meiner Anwendung kann ich nicht hinzufügen, mir fehlt dort die Skype.dll.


    Vielen Dank schon mal :=)

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Servus!
    Ich habe vor längerer Zeit ein Tutorial über das Steuern eines Computers über Skype verfasst.
    Grundsätzlich könnte man die dort erklärten Mechaniken auf dein Vorhaben übetragen, allerdings muss ich sagen, habe ich keine Ahnung was die "Skype for Business" ist, und ob es da einen Unterschied bezüglich der normaler Version gibt. (Also ob das tutorial anwenbar ist)
    Nichts desto trotz solltest du mal rein schauen:
    Computer über Skype "steuern" mit einer funktionierenden Alternative zur Skype4Com.dll (Stand: 20.03.2016)

    Du müsstest dir die Events CallStarted, bzw Message Received (usw) ansehen.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    @Gather Danke für den Link. Ich habe eine Testanwendung erstellt. Komme damit aber leider nicht so wirklich klar.

    VB.NET-Quellcode

    1. ​Option Strict On
    2. Option Explicit On
    3. Option Infer On
    4. Imports Skype4Sharp
    5. Imports Skype4Sharp.Auth
    6. Imports Skype4Sharp.Enums
    7. Imports Skype4Sharp.Events
    8. Imports Skype4Sharp.Exceptions
    9. Imports Skype4Sharp.Helpers
    10. Public Class Form1
    11. Private authCreds As New SkypeCredentials("TestUser", "1234")
    12. Private mainSkype As New Skype4Sharp.Skype4Sharp(authCreds)
    13. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    14. End Sub
    15. Private Function Login() As Boolean
    16. Dim wasSuccessful As Boolean = False
    17. Console.WriteLine("[LOGIN]: Login with your skype account")
    18. Console.WriteLine("[LOGIN]: Username..")
    19. Dim user As String = Console.ReadLine
    20. Console.WriteLine("[LOGIN]: Password..")
    21. Dim info As ConsoleKeyInfo
    22. Dim pass As String = String.Empty
    23. Do
    24. info = Console.ReadKey(True)
    25. If info.Key = ConsoleKey.Enter Then
    26. Console.WriteLine()
    27. Exit Do
    28. Else
    29. pass &= info.KeyChar
    30. Console.Write("*"c)
    31. End If
    32. Loop
    33. authCreds = New SkypeCredentials(user, pass)
    34. mainSkype = New Skype4Sharp.Skype4Sharp(authCreds)
    35. Console.WriteLine("[DEBUG]: Logging in with {0}", authCreds.Username)
    36. If mainSkype.Login() Then
    37. wasSuccessful = True
    38. Console.WriteLine("[DEBUG]: Login complete")
    39. End If
    40. Return wasSuccessful
    41. End Function
    42. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    43. mainSkype.Login()
    44. End Sub
    45. End Class


    So sieht der Code aus. Wenn ich auf Button1 klicke, passiert natürlich nichts. Ich weiß auch nicht so wirklich wie ich das in einer console darstellen kann. Vielleicht hast du ja mal Lust mir ein bisschen weiter zu helfen. Ich finde leider kein Tool welches das so kann (Skype Anruf geht ein, Programm wird gestartet).

    Danke erstmal :)
    Hi, ich hab skype bei mir drin um den userstatus auszulesen. du brauchst andere dlls als die Skype4..

    hier ein beispiel:

    Quellcode

    1. Public Function GetUsersPresence(user As String) As ContactAvailability
    2. Try
    3. Dim _contact As Contact
    4. Dim myimage As Image
    5. Dim state As ContactAvailability
    6. Dim client = LyncClient.GetClient()
    7. Dim contactManager = client.ContactManager.CreateSubscription()
    8. Dim contactInformationList As New List(Of ContactInformationType)
    9. contactInformationList.Add(ContactInformationType.Availability)
    10. contactInformationList.Add(ContactInformationType.Photo)
    11. 'contactManager.AddContact(client.ContactManager.GetContactByUri(user))
    12. contactManager = LyncClient.GetClient().ContactManager.CreateSubscription()
    13. Dim contact = client.ContactManager.GetContactByUri(user)
    14. _contact = contact
    15. contactManager.AddContact(contact)
    16. contactManager.Subscribe(ContactSubscriptionRefreshRate.High, contactInformationList)
    17. Dim dic As IDictionary(Of ContactInformationType, Object) = Nothing
    18. dic = contact.GetContactInformation(contactInformationList)
    19. Dim photoStream As Stream = TryCast(dic(ContactInformationType.Photo), Stream)
    20. If photoStream Is Nothing Then
    21. Else
    22. myimage = Image.FromStream(photoStream)
    23. PicboxLync.Image = myimage
    24. End If
    25. state = _contact.GetContactInformation(ContactInformationType.Availability)
    26. Select Case state
    27. Case 3500 'online
    28. Me.GridLyncColor.Background = New SolidColorBrush(Colors.Green)
    29. Case 6500 'Busy
    30. Me.GridLyncColor.Background = New SolidColorBrush(Colors.OrangeRed)
    31. Case 9500 'dnd
    32. Me.GridLyncColor.Background = New SolidColorBrush(Colors.DarkRed)
    33. Case 12500 'be right back
    34. Me.GridLyncColor.Background = New SolidColorBrush(Colors.Yellow)
    35. Case 15500 'away off work
    36. Me.GridLyncColor.Background = New SolidColorBrush(Colors.Yellow)
    37. Case 18500 'offline
    38. Me.GridLyncColor.Background = New SolidColorBrush(Colors.FloralWhite)
    39. End Select
    40. Return Nothing
    41. Catch
    42. Return Nothing
    43. End Function
    44. End Try


    das ganze wird über

    Quellcode

    1. GetUsersPresence("email@emal.com")


    aufgerufen. Die 2 dlls hab ich dir angehängt.
    Dateien
    Das Ganze ist in einer Konsolenanwendung :)
    Dort fügst du den Login befehl in die Main Sub ein.
    Ließ dir am Besten das Ganze Tutorial durch und überfliege nicht nur den Code. Vieles ist in den Zeilen dazwischen (ist ja ein Tutorial und kein Sourcecodeaustausch).

    Du musst nämlich im Anschluss einen Handler erstellen wenn der Login erfolgreich war:
    AddHandler mainSkype.messageReceived, AddressOf MainSkype_messageReceived und anschließend mit mainSkype.StartPoll() das Ganze starten.
    Hier benötigst du anschließend ein Event um die erhaltene Nachricht abzufangen:

    VB.NET-Quellcode

    1. Private Shared Sub MainSkype_messageReceived(ByVal pMessage As ChatMessage)
    2. Dim rMessage As ChatMessage = pMessage.Chat.SendMessage("Processing your message...")
    3. 'mache etwas mit der Nachricht.
    4. End Sub

    Nach diesem Motto kannst du das Ganze auch mit Anrufen machen in dem du einfach das CallStarted Event abbonierst anstatt .messageReceived

    Also ca so: (Aus dem Kopf)

    VB.NET-Quellcode

    1. Sub Main()
    2. If Login() Then
    3. AddHandler mainSkype.CallStarted, AddressOf MainSkype_CallStarted
    4. mainSkype.StartPoll()
    5. End If
    6. End Sub
    7. Private Sub MainSkype_callStarted(ByVal originChat As Chat, ByVal eventInitiator As User)
    8. Console.WriteLine("[EVENT]: CALL_STARTED > {0} ({1})", originChat.ID, eventInitiator.Username)
    9. 'Wird ausgelöst sobald ein Anruf gestartet wurde
    10. End Sub



    Edit:// Nicht vergessen. Die Anwendung muss laufen, Skype natürlich auch, und Verweise müssen logischerweise gesetzt werden.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Skype for business ist der Nachfolger von Lync. MS wollte die Namen vereinheitlichen.

    Es gibt auch von MS eine Anlaufstelle:
    docs.microsoft.com/en-us/skype-sdk/skypedeveloperplatform
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    @Gather Danke erstmal :) Aber ich wollte das in eine Windows Form Anwendung einbauen.

    @MrTrebron Auch Dir Danke. Ich finde dort leider keinen Download. Vielleicht kann mir ja einer helfen mein Ziel zu erreichen. Falls ihr eine andere Idee habt, wie ich bei Skype anrufen ein Programm ausführen kann, bin ich natürlich auch offen für :)

    Im Prinzip möchte ich einfach einen Blink1 USB Stick leuchten lassen sobald ich einen Anruf erhalte. Über die Windows Ereignisse funktioniert das leider auch nicht. Ich bin am verzweifeln.
    Nochmal. Exakt so wie in meinem Beispiel. Ob es jetzt eine Konsole ist oder nicht, das ändert null. Lediglich den Output.
    Ich finde es echt komisch. Du fragst um hilfe ließt aber nicht das von mir gepostete, das genau das machen kann, was du möchtest.
    Versuche einfach den Code in eine Winforms einzubauen, da sollte nicht schief gehen wenn du wie folgt vorgehst:

    Quellcode

    1. -Login
    2. -Handler hinzufügen
    3. -Poll starten
    4. -Auf Event Reagieren.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    @r0tzi Danke :) Leider erhalte ich einen Fehler wenn ich die DLL´s hinzufüge.

    Warnung 1 Es wurde ein Verweis auf die eingebettete Interopassembly "Microsoft.Office.Uc" aufgrund eines indirekten Verweises auf diese Assembly aus Assembly "Microsoft.Lync.Model" erstellt. Ändern Sie ggf. für beide Assembly die Eigenschaft "Interoptypen einbetten". WindowsApplication1


    Kannst du mir jetzt noch sagen wie ich eingehende Anrufe triggern kann? Vielleicht hast du ja Lust und Zeit mir das anhand deines Beispiels einmal zu erklären.

    @Gather Nimm es mir nicht übel. Mir ist das echt unangenehm, aber ich bin halt ziemlich neu in der vb.net welt und habe echt noch Schwierigkeiten. Ich bin froh wenn ich simple Anwendungen hinbekomme :P Aber vielleicht hast du ja trotzdem Lust mir weiterzuhelfen. Schritt für Schritt. Gerne auch privat falls es hier im Forum zu voll wird.
    Ich möchte das Thema nochmal aufgreifen.

    Ich habe nun folgendes gefunden:
    create.arduino.cc/projecthub/m…skype-status-light-c2df6c
    Hier findet man dann die LyncPresenceBridge.exe
    Wenn ich die herunterlade und dann den Status bei Skype ändere, bekommt es das Programm mit. Kann ich mit der Microsoft.Lync.Model.dll vielleicht etwas einfaches realisieren?
    Irgendwie muss das Programm ja auch die Änderung mitbekommen...

    Ich habe es zumindest schon mal geschaft, abzufragen ob Skype läuft.

    VB.NET-Quellcode

    1. ​Imports Microsoft.Lync.Model
    2. Public Class Form1
    3. Dim SkypeClient As Microsoft.Lync.Model.Client = Microsoft.Lync.Model.LyncClient.GetClient()
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. TextBox1.Text = SkypeClient.State
    6. End Sub
    7. End Class


    Ich hoffe auf Eure Hilfe :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sub7evenHH“ ()